参考:《大话数据结构》

 

这是一个按照路径长度递增的次序产生最短路径的算法。它并不是一次求出源点到目标点的最短路径,而是一步步求出它们之间顶点的最短路径,过程中都是基于已经求出的最短路径的基础上,求得更远顶点的最短路径,最终得到想要的结果。

  1. #define MAXVEX 9
  2. #define INFINITY
  3. typedef int PathMatrix[MAXVEX]
  4. typedef int ShortPathTable[MAXVEX]
  5. void ShortestPath_Dijkstra(MGraph G, int v0, PathMatrix *p, ShortPathTable *D)
  6. {
  7. int v,w,k,min;
  8. int final[MAXVEX]; //final[w]=1表示求得顶点v0到vw的最短路径
  9. for(v=0;v<G.numVertexes;v++)
  10. {
  11. final[v] = 0; //全部顶点初始化为未知最短路径状态
  12. (*D)[v] = G.matrix[v0][v]; //将与v0点有连线的顶点加上权值
  13. (*p)[v] = 0; //初始化路径数组p为0
  14. }
  15. (*D)[v0] = 0; //v0至v0路径为0
  16. final[v0] = 1; //v0至v0不需要求路径
  17. /*开始主循环,每次求得v0到某个v顶点的最短路径*/
  18. for(v=1;v<G.numVertexes;v++)
  19. {
  20. min = INFINITY;
  21. for(w=0;w<G.numVertexes;w++) //寻找离v0最近的顶点
  22. {
  23. if(!final[w] && (*D)[w] < min)
  24. {
  25. k = w;
  26. min = (*D)[w];
  27. }
  28. }
  29. }
  30. final[k] = 1; //将目前找到的最近的顶点置为1
  31. for(w=0;w<G.numVertexes;w++)
  32. {
  33. if(!final[w] && (min + G.matrix[k][w])<(*D)[w]) //如果警告v顶点的路径比现在这条路径的长度短的话
  34. {
  35. (*D)[w] = min + G.matrix[k][w];
  36. (*p)[w] = k;
  37. }
  38. }
  39. }

 

版权声明:本文为144823836yj原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/144823836yj/p/9039176.html