Dijkstra.h
上传用户:hbxtsdjs
上传日期:2022-04-11
资源大小:1594k
文件大小:1k
源码类别:

电子书籍

开发平台:

C/C++

  1. void Dijkstra(AdjMWGraph G, int v0, int distance[], int path[])
  2. //带权图G从下标v0顶点到其它顶点的最短距离distance和最短路径下标path
  3. {
  4. int n = G.Vertices.size;
  5. int *s = (int *)malloc(sizeof(int)*n);
  6. int minDis, i, j, u;
  7. //初始化 
  8. for(i = 0; i < n; i ++)
  9. {
  10. distance[i] = G.edge[v0][i];
  11. s[i] = 0;
  12. if(i != v0 && distance[i] < MaxWeight) path[i] = v0;
  13. else path[i] = -1;
  14. }
  15. s[v0] = 1;       //标记顶点v0已从集合T加入到集合S中 
  16. // 在当前还未找到最短路径的顶点集中选取具有最短距离的顶点u 
  17. for(i = 1; i < n; i ++)
  18. {
  19. minDis = MaxWeight;
  20. for(j = 0;j <= n;j ++)
  21. if(s[j] == 0 && distance[j] < minDis)
  22. {
  23. u = j;
  24. minDis = distance[j];
  25. }
  26. //当已不再存在路径时算法结束;此语句对非连通图是必须的
  27. if(minDis == MaxWeight) return;
  28. s[u] = 1;     //标记顶点u已从集合T加入到集合S中
  29. //修改从v0到其它顶点的最短距离和最短路径
  30. for(j = 0; j < n; j++)
  31. if(s[j] == 0 && G.edge[u][j] < MaxWeight && 
  32. distance[u] + G.edge[u][j] < distance[j])
  33. {
  34. //顶点v0经顶点u到其它顶点的最短距离和最短路径
  35. distance[j] = distance[u] + G.edge[u][j];
  36. path[j] = u;
  37. }
  38. }
  39. }