Алгоритм кратчайшего пути Дейкстры - PullRequest
5 голосов
/ 30 ноября 2011

Ниже приводится краткое изложение алгоритма, данное нам нашим профессором.

Каков родитель узла в графе, как указано в шаге 3? Я немного сбит с толку, хотя я думаю, что узлы имеют только соседей и не имеют родителя? 1005 *

Мой второй вопрос касается шага 3: «собрать индексную запись в стеке». Поскольку стек позволяет просматривать только верх, я не уверен, что это значит, взяв индексную запись?

Кратчайший путь Дейкстры:

Step 0: if s == d, stop.
Step 1: current node c= s, c.length = 0, stack.push (c, its length, and parent). 
        If u is the source s then no need for parent.
Step 2: min = 0, hop = infinite, index = 1
Step 3: pick up the index’th record in stack, say node u, its length u.length, 
        and its parent w.
Step 4: find a neighbor of u in the table of neighbors, say v, such that v is 
        not found in any item in stack and <u,v> +u.length< hop. 
Step 5: if such a neighbor is found, hop=min=u.length + <u,v> and record_node = v
Step 6: go to step 4 until all the neighbors of u have been tried (all can be 
        found in stack).
Step 7: index ++, go to step 3 until all the nodes have been tried (found in 
        stack).
Step 8: c = record_node, c.length = min, stack_push(c, c.length, u). If c == d 
        stop the entire process and goes to step 9 for data collection, 
        otherwise go to step 2.
Step 9: (t, d.length, and t.parent) = (d, d.length, and d.parent) in stack, 
        keep searching on (t.parent, t.parent.length, t.parent.parent), 
        until t.parent = s.

Ответы [ 3 ]

4 голосов
/ 30 ноября 2011

В графе узлы имеют только соседей, но при выполнении алгоритма Дейкстры вы строите «дерево», описывающее кратчайший путь от начального узла до всех узлов в исходном графе.

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

Надеюсь, что ответ на ваш вопрос:)

3 голосов
/ 30 ноября 2011

Может быть этот апплет может вам помочь.

Я настоятельно рекомендую просто заглянуть в Интернет для лучшего объяснения алгоритма.В настоящее время это наиболее используемый алгоритм для навигационного программного обеспечения - его использует каждая крупная навигационная компания (и, вероятно, также небольшие).Он также используется в качестве алгоритма поиска пути в играх.

http://www.cs.auckland.ac.nz/~jmor159/PLDS210/dijkstra.html

1 голос
/ 30 ноября 2011

Родитель относится к узлу на пути за один шаг до узлов, которые вы в данный момент проверяете. Другими словами: путь - это ориентированный граф, в котором каждый узел имеет порядок 2 (то есть он соединен ребрами с двумя другими узлами), за исключением первого и последнего узла. Родитель узла является предшественником этого узла.

О стеке: возможно, это не реальный стек, а просто структура, в которую вы помещаете узлы; затем вы можете индексировать все узлы в этой структуре, а не только один сверху. Но я согласен, стек не очень хороший выбор слов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...