buuctf crytro 救世捷径

graph=[]
for i in range(27):
    graph.append([])
for i in range(27):
    for j in range(27):
        graph[i].append(0x3f3f3f)
f=open('zdlj.txt','r').readlines()#这里需要手动将原文中的最后一行换行给去掉
li=[]
for x in f:
    li.append(x.strip().split(' '))
#print(li)
#print(graph)
for x in li:
    graph[int(x[0])][int(x[1])]=int(x[2])
    graph[int(x[1])][int(x[0])]=int(x[2])
#print(graph)
def dijkstra():
    dv=[0x3f3f3f for i in range(27)]#点i到起点1的最短距离
    route=[1 for i in range(27)]#记录每点和与它对应的上一点
    vis=[0 for i in range(27)]#各点到起点的最短距离是否已定.
    for i in range(2,27):
        dv[i]=graph[i][1]
    dv[1]=0
    #print(dv)
    vis[1]=1
    for i in range(26):
        minn=0x3f3f3f
        temp=-1
        for j in range(2,27):
            if vis[j]==0 and minn>dv[j]:
                minn=dv[j]
                temp=j
        vis[temp]=1
        #print(temp)
        for j in range(2,27):
            if dv[j]>dv[temp]+graph[temp][j]:
                dv[j]=dv[temp]+graph[temp][j]
                route[j]=temp
    return (route,dv)
route,dv=dijkstra()
print(dv[26])
print(route)
y=26
while y!=1:
    print(y)#这里输出路径
    y=route[y]

运行可得

339
[1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 5, 5, 5, 4, 4, 4, 6, 6, 6, 25, 9, 11, 12, 6, 18, 22, 25]
26
25
22
12
5
2

flag

flag{WEIVKASJVLSJCHFSJVHJSDEV}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值