这两位大佬写的都很好
这位==大佬 == 的Dijkstra算法和Floyd算法写的都很好,不过后面的那个算法过程有点抽象,但是其代码写的很直观,看不懂的可以结合这位 大佬看看
##这是我在刷题过程中的代码。放在这里,留着自己查看的哈
import sys
class DGraph:
def __init__(self,n):
self.vertices=n
self.edge=[{ } for _ in range(n)]
def add_edge(self,s,t,w):
self.edge[s][t]=w
def zuduanlujing(g,S,T):
is_Visited=[True for _ in range(g.vertices)]
dist=[sys.maxsize for _ in range(g.vertices)]
is_Visited[S]=False
for node,w in g.edge[S].items():
dist[node]=w
for i in range(g.vertices):
#找到最小值和最小点
min_dist=sys.maxsize
u=S
for i,di in enumerate(dist):
if is_Visited[i] and di<min_dist:
min_dist=di
u=i
is_Visited[u]=False
if u ==T:
return min_dist
for node,w in g.edge[u].items():
if min_dist+w<dist[node]:
dist[node]=min_dist+w
if is_Visited[T]:
return None
return dist[T]
if __name__=="__main__":
N,M,S,T=list(map(int,sys.stdin.readline().strip().split()))
graph=DGraph(N)
for _ in range(M):
s,t,m=list(map(int,sys.stdin.readline().strip().split()))
graph.add_edge(s,t,m)
print(graph.edge)
print(zuduanlujing(graph,S,T))
print(zuduanlujing(graph, T, S))