标签:
///标准的dijkstra算法 void dijkstra() { while(true) { int vert=-1; dis[-1]=INF; for(int i=0;i<num_v;i++) { if( (!used[i]) && ( vert==-1||dis[i]<dis[vert] ) ) {vert=i;} } if(vert==-1) break;///这里要提前break;好像是这样。。。 used[vert]=1; for(int i=0;i<num_v;++i) { dis[i]=min{dis[i],dis[vert]+cost[vert][i]};///如果图是单向的,那么有一半的cost[i][j]值全为INF } } } ///单源最短路问题2 Dijkstra算法 ///在上一题中,因为是对边遍历,不知道下一个搜索的是啥。。 ///在尚未使用的点中,距离最小的点就是下一个去确定(搜索、使用)的点 ///这个思路也是没有问题的 int cost[MAX_V][MAX_V];///注意必须将不存在的边设为INF int used[MAX_V]; int dis[MAX_V];///先初始化dis void dijkstra( ) { while(true) { int flag=0; used[ver]=1; for(int j=0;j<num_v;++j) { if(dis[ver]+cost[ver][j]<dis[j]) { dis[j]=dis[ver]+cost[ver][j]; } } int min_num=-INF; for(int i=0;i<num_v;++i) { if( (!used[i]) && dis[i]<min_num ) {ver=i;flag=1;} } if(flag==0) break; } }
标签:
原文地址:http://www.cnblogs.com/weiweiyi/p/5236558.html