图论-Floyd算法
在搜索中bfs只适合无权图
若是碰到有权图最简单的方法就是用邻接矩阵-二维矩阵存储每个点对之间的权重,然后用floyd
并且邻接矩阵还可以处理重边的问题(用min)
INF=float('inf')
ma=[[INF]*n for _ in range(n)]for i in range(n):ma[i][i]=0for i in range(m):a,b,c=map(int,input().split())ma[a-1][b-1]=min(ma[a-1][b-1],c)ma[b-1][a-1]=min(ma[b-1][a-1],c)
下面介绍floyd算法,他本质其实就是动态规划
枚举在 i、j 点之间的所有可能点k,用min存储更小的途径
def floyd(graph)# 顶点数量n = len(graph)# 初始化距离矩阵dist = [[graph[i][j] for j in range(n)] for i in range(n)]# 三重循环更新距离矩阵for k in range(n):for i in range(n):for j in range(n):# 如果通过顶点k可以缩短路径,则更新路径长度dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])return distd=floyd(ma)