Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Порядок работы программы.





1. Проводим инициализацию графа.

 

_graph = [[Graph alloc] init];

 

2. После того, как пользователь кликнет по кнопке «Start», выполняется следующее действие:

 

- (IBAction)startButtonPressed:(id)sender

{

NSLog(@"Start button pressed");

[self dijkstra];

}

 

Из которого вызывается метод dijkstra.

 

3. Метод dijkstra реализует работу алгоритма Дейкстры.

 

- (void)dijkstra {

NSMutableArray *unVisited = [[NSMutableArray alloc] initWithCapacity:[self.graph.nodes count]];

NSMutableArray *distance = [[NSMutableArray alloc] initWithCapacity:[self.graph.nodes count]];

NSMutableArray *previous = [[NSMutableArray alloc] initWithCapacity:[self.graph.nodes count]];

 

// Стартовая вершина ("S")

Node *startNode = self.canvas.start;

// Конечная вершина ("T")

Node *endNode = self.canvas.end;

 

for (Node *node in self.graph.nodes) {

[distance addObject:[NSNumber numberWithFloat:INFINITY]];

[previous addObject:startNode];

}

 

 

[distance replaceObjectAtIndex:[self indexOfNode:startNode] withObject:[NSNumber numberWithInt:0]];

[unVisited addObjectsFromArray:self.graph.nodes];

 

 

while ([unVisited count]!= 0) {

 

Node *nodeWithMinPath = [unVisited objectAtIndex:0];

NSNumber *minNum = [distance objectAtIndex:[self indexOfNode:nodeWithMinPath]];

for (Node *node in unVisited) {

if ([minNum floatValue] > [[distance objectAtIndex:[self indexOfNode:node]] floatValue]) {

minNum = [distance objectAtIndex:[self indexOfNode:node]];

nodeWithMinPath = node;

}

}

 

[unVisited removeObject:nodeWithMinPath];

 

if ([[distance objectAtIndex:[self indexOfNode:nodeWithMinPath]] floatValue] == INFINITY)

break;

 

for (Path *pathToFriend in nodeWithMinPath.pathToFriends) {

if ([unVisited containsObject:pathToFriend.connectedNode] == NO) {

continue;

}

 

 

NSNumber *alt = [NSNumber numberWithFloat:[[distance objectAtIndex:[self indexOfNode:nodeWithMinPath]] floatValue] + [[NSNumber numberWithInteger:pathToFriend.edgeCost] floatValue]];

 

if ([alt floatValue] < [[distance objectAtIndex:[self indexOfNode:pathToFriend.connectedNode]] floatValue]) {

[distance replaceObjectAtIndex:[self indexOfNode:pathToFriend.connectedNode] withObject:alt];

[previous replaceObjectAtIndex:[self indexOfNode:pathToFriend.connectedNode] withObject:nodeWithMinPath];

}

}

}

 

// Show result

NSMutableArray *reverseResult = [[NSMutableArray alloc] init];

 

Node *node = endNode;

[reverseResult addObject:node];

while (node!= startNode) {

node = [previous objectAtIndex:[self indexOfNode:node]];

[reverseResult addObject:node];

}

 

NSString *result = @"Path: ";

for (int i = (int)[reverseResult count]-1; i >= 0; i--) {

Node *foo = [reverseResult objectAtIndex:i];

NSLog(@"res: '%i'", foo.value);

result = [result stringByAppendingFormat:@"%i ", foo.value];

}

 

NSNumber *resultSum = [distance objectAtIndex:[self indexOfNode:endNode]];

NSLog(@"resultSum: %f", [resultSum floatValue]);

result = [result stringByAppendingFormat:@"\nShortest Path Cost: %f ", [resultSum floatValue]];

[self.resultLabel setStringValue:result];

}

 







Дата добавления: 2015-09-04; просмотров: 553. Нарушение авторских прав; Мы поможем в написании вашей работы!




Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...


Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...


Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Роль органов чувств в ориентировке слепых Процесс ориентации протекает на основе совместной, интегративной деятельности сохранных анализаторов, каждый из которых при определенных объективных условиях может выступать как ведущий...

Лечебно-охранительный режим, его элементы и значение.   Терапевтическое воздействие на пациента подразумевает не только использование всех видов лечения, но и применение лечебно-охранительного режима – соблюдение условий поведения, способствующих выздоровлению...

Тема: Кинематика поступательного и вращательного движения. 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью, проекция которой изменяется со временем 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью...

Вопрос 1. Коллективные средства защиты: вентиляция, освещение, защита от шума и вибрации Коллективные средства защиты: вентиляция, освещение, защита от шума и вибрации К коллективным средствам защиты относятся: вентиляция, отопление, освещение, защита от шума и вибрации...

Задержки и неисправности пистолета Макарова 1.Что может произойти при стрельбе из пистолета, если загрязнятся пазы на рамке...

Вопрос. Отличие деятельности человека от поведения животных главные отличия деятельности человека от активности животных сводятся к следующему: 1...

Studopedia.info - Студопедия - 2014-2026 год . (0.009 сек.) русская версия | украинская версия