1 2 100 FLAG{
2 3 87 AFQWE
2 4 57 ETKLS
2 5 50 WEIVK
2 6 51 AWEIW
3 7 94 QIECJF
3 8 78 QSXKE
3 9 85 QWEIH
4 13 54 WQOJF
4 14 47 KDNVE
4 15 98 QISNV
5 10 43 AEWJV
5 11 32 QWKXF
5 12 44 ASJVL
6 16 59 ASJXJ
6 17 92 QJXNV
6 18 39 SCJJF
6 23 99 SJVHF
7 19 99 WJCNF
8 20 96 SKCNG
9 20 86 SJXHF
10 21 60 SJJCH
11 21 57 SJHGG
12 22 47 SJCHF
14 10 55 EJFHG
16 17 59 ASJVH
18 12 53 SJFHG
18 24 93 SHFVG
21 22 33 SJFHB
19 25 88 ASHHF
20 25 96 SJVHG
22 25 23 SJVHJ
25 26 75 SDEV}
max=2000
graph=[[max] * 27 for _ in range(27)]
#读取节点信息
f=open('dj.txt','r').readlines()
#存入列表
for x in f:
a,b,c,d=x.strip().split(' ')
graph[int(a)][int(b)]=int(c)
graph[int(b)][int(a)]=int(c)
temp1=[True for a in range(27)]
zuixiao=[0 for _ in range(27)]#每个点距离源点的最短距离
biaoji=[0 for _ in range(27)]
biaoji[0]=1
biaoji[1]=1
# init 初始化第一轮计算内容
for each in range(2,27):
zuixiao[each]=graph[each][1]
for i in range(26):
# 检查单前轮列表内容,查找最小并标记
max=2000
for each in range(2,27):
if biaoji[each]==0 and zuixiao[each]<max:
max=zuixiao[each]
pos=each
biaoji[pos]=1
#如果有松弛,则更新松弛后的结果
#如有有松弛,对于每个点而言,在当前轮中有且只有一次
for j in range(2,27):
if zuixiao[pos]+graph[pos][j]<zuixiao[j]:
zuixiao[j]=zuixiao[pos]+graph[pos][j]
temp1[j]=pos
print('zuixiao:',zuixiao)
print('temp1:',temp1)
y=26
route=[]
while y!=1:
print('this way',y)#这里输出路径
route.append(y)
y=temp1[y]
route.append(1)
print(route)
for x in f:
a,b,c,d=x.strip().split(' ')
graph[int(a)][int(b)]=d
graph[int(b)][int(a)]=d
for each in range(len(route)-1,0,-1):
a,b=route[each],route[each-1]
print(graph[a][b],end='')
# [26, 25, 22, 12, 5, 2, 1]
# FLAG{WEIVKASJVLSJCHFSJVHJSDEV}