图论
DFS 算法
BFS 算法
Dijkstra 算法
INF=99999999#无穷
def Dispath(dist,path,s,v):
#打印从v出发的所有顶点的最短路径,
result=[]
for i in range(len(dist)):
print("{}->{}".format(v,i),end=' ')
print("最短路径为:",end=' ')
print(dist[i],end=' ')
j=i
while(j!=v):
result.append(j)
j=path[j]
result=result[::-1]
print([0]+result)
result=[]
def Dijkstra(graph,v):
dist=[INF]*len(graph)#距离数组
path=[0]*len(graph)#路径数组
s=[0]*len(graph)#s[i]=1代表顶点i在s中,s[i]=0表示顶点在u中
for i in range(len(graph)):
dist[i]=graph[v][i]#距离初始化
s[i]=0 #s[]置空
if(graph[v][i]<INF):
path[i]=v#顶点v到i有边时
else:
path[i]=-1#顶点v到i没边时
s[v]=1#第一个顶点
for i in range(len(graph)):
MINdis=INF
for j in range(len(graph)):#找到长度最小的点u
if(s[j]==0 and dist[j]<MINdis):
u=j
MINdis=dist[j]
s[u]=1#u加入到s中
for j in range(len(graph)):#调整,修改不在s中的顶点的距离
if(s[j]==0):
if(graph[u][j]<INF and dist[u]+graph[u][j]<dist[j]):
dist[j]=dist[u]+graph[u][j]
path[j]=u
print(dist)
print(path)
Dispath(dist,path,s,v)
graph = [[0, 1, 12, INF, INF, INF],
[INF, 0, 9, 3, INF, INF],
[INF, INF, 0, INF, 5, INF],
[INF, INF, 4, 0, 13, 15],
[INF, INF, INF, INF, 0, 4],
[INF, INF, INF, INF, INF, 0]]
Dijkstra(graph,0)
结果: