Redian新闻
>
Dijkstra 算法为什么优先populate当前最小dist的那个节点?
avatar
Dijkstra 算法为什么优先populate当前最小dist的那个节点?# JobHunting - 待字闺中
w*x
1
1 function Dijkstra(Graph, source):
2 for each vertex v in Graph:
3 dist[v] := infinity ;
4
5 previous[v] := undefined ;
6
7
8 dist[source] := 0 ;
9 Q := the set of all nodes in Graph ;
10
11 while Q is not empty:
12 u := vertex in Q with smallest distance in dist[] ;
13 remove u from Q ;
14 if dist[u] = infinity:
15 break ;
16
17
18 for each neighbor v of u:
19
removed from Q.
20 alt := dist[u] + dist_between(u, v) ;
21 if alt < dist[v]:
22 dist[v] := alt ;
23 previous[v] := u ;
24 decrease-key v in Q;
25 return dist;
==================================
第12行为什么要去最小的? 随便取一个不为infinity的不就得了?
avatar
t*7
2
只有你的出发点这个时候才是0,其他全部是INFINITY
avatar
i*e
3
如果节点A到节点B的最短路径经过节点C,那么这条最短路径上从A至C之间的子路径一定
是从节点A到节点C的最短路径。也就是说,从A到B的最短路径是建立在从A到C的最短路
径基础上的,这是为什么每次总是从unfinished节点集合中找当前距离源点最近的节点
的原因。
节点集合应该放到一个按节点和源点距离排序的min priority_queue中。但是由于每个
节点对源点距离是动态变化的,STL和Java的Priority_queue似乎不能处理这种情况,
那位大牛说说应该怎么解决?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。