当前位置:   article > 正文

弗洛伊德Floyd算法:代码详解及运行过程图解_floyd代码

floyd代码
#弗洛伊德算法:找到任意所有顶点到所有顶点的最短路径
#其实我觉得就是把迪杰斯特拉算法执行了n次,然后抽象出来,直接对图的邻接矩阵进行操作最终得到从所有结点到所有结点的最短路径

 

  1. #弗洛伊德算法:找到任意所有顶点到所有顶点的最短路径
  2. #其实我觉得就是把迪杰斯特拉算法执行了n次,然后抽象出来,直接对图的邻接矩阵进行操作最终得到从所有结点到所有结点的最短路径
  3. def Floyd(g):
  4. A=[[0]*MAXV for i in range(MAXV)]#用A存放之后的最短路径的邻接矩阵
  5. path=[[0]*MAXV for i in range(MAXV)]
  6. for i in range(g.n):
  7. for j in range(g.n):
  8. A[i][j]=g.edges[i][j]
  9. if i !=j and g.edges[i][j]<INF:
  10. path[i][j]=i#path仍然是到这个结点最短路径的前一个结点
  11. else:
  12. path[i][j]=-1
  13. #k作为中转顶点去遍历每一个顶点,所以时间复杂度是n*n*n
  14. for k in range(g.n):
  15. for i in range(g.n):
  16. for j in range(g.n):
  17. if A[i][j]>A[i][k]+A[k][j]:#这一步得看图才能理解
  18. A[i][j]=A[i][k]+A[k][j]
  19. path[i][j]=path[k][j]
  20. Dispath(A,path,g)
  21. def Dispath(A,path,g):
  22. for i in range(g.n):
  23. for j in range(g.n):
  24. if A[i][j]!=INF and i!=j:
  25. print("顶点%d到%d的最短路径长度:%d \t路径:"%(i,j,A[i][j]),end='')
  26. k=path[i][j]
  27. apath=[j]
  28. while k!=-1 and k!=i:
  29. apath.append(k)
  30. k=path[i][k]
  31. apath.append(i)
  32. apath.reverse()
  33. print(apath)
'
运行

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/822021
推荐阅读
相关标签
  

闽ICP备14008679号