[C] Dijkstra算法求最短路径 →→→→→进入此内容的聊天室

来自 , 2019-10-12, 写在 C, 查看 124 次.
URL http://www.code666.cn/view/c902b497
  1. void ShortestPath_1 ( Mgraph G,int v0,PathMatrix *p, ShortPathTable *D )
  2. { /*用Dijkstra 算法求有向网G 的v0 顶点到其余顶点v 的最短路径P[v]及其路径长度D[v]*/
  3.         /*若P[v][w]为TRUE,则w 是从v0 到v 当前求得最短路径上的顶点*/
  4.         /*final[v] 为TRUE 当且仅当v∈S, ,即已经求得从v0 到v 的最短路径*/
  5.         /*常量INFINITY 为边上权值可能的最大值*/
  6.         for ( v=0; v<G.vexnum; ++v )
  7.         {
  8.                 fianl[v]=FALSE;
  9.                 D[v]=G.edges[v0][v];
  10.                 for ( w=0; w<G.vexnum; ++w ) P[v][w]=FALSE; /*设空路径*/
  11.                 if ( D[v]<INFINITY ) {P[v][v0]=TRUE; P[v][w]=TRUE;}
  12.         }
  13.         D[v0]=0;
  14.         final[v0]=TRUE; /*初始化,v0 顶点属于S 集*/
  15.                   /*开始主循环,每次求得v0 到某个v 顶点的最短路径,并加v 到集*/
  16.                   for ( i=1; i<G.vexnum; ++i ) /*其余G.vexnum-1 个顶点*/
  17.         {
  18.                 min=INFINITY; /*min 为当前所知离v0 顶点的最近距离*/
  19.                 for ( w=0; w<G.vexnum; ++w )
  20.                         if ( !final[w] ) /*w 顶点在V-S 中*/
  21.                                 if ( D[w]<min ) {v=w; min=D[w];}
  22.                 final[v]=TRUE /*离v0 顶点最近的v 加入S 集合*/
  23.                          for ( w=0; w>G.vexnum; ++w ) /*更新当前最短路径*/
  24.                                  if ( !final[w]&& ( min+G.edges[v][w]<D[w] ) ) /*修改D[w]和P[w],w∈V-S*/
  25.                         {
  26.                                 D[w]=min+G.edges[v][w];
  27.                                 P[w]=P[v];
  28.                                 P[w][v]=TRUE; /*P[w]=P[v]+P[w]*/
  29.                         }
  30.         }
  31. }/*ShortestPath._1*/
  32.  
  33.  

回复 "Dijkstra算法求最短路径"

这儿你可以回复上面这条便签

captcha