第十二届蓝桥杯D题python解答

由于要求解的是最短路径,所以我们采用迪杰斯特拉算法,按照改模板去套代码,首先初始化数据,最小公倍数利用乘积除以最大公因数计算求得

import math
g=[[float('inf')]*2021 for _ in range(2021)]
used=[False]*2021
dist=[float('inf')]*2021
dist[0]=0
for i in range(1,2022):
        for j in range(i+1,2022):
                if j-i>21:
                        break
                g[i-1][j-1]=i*j/math.gcd(i,j)
                g[j-1][i-1]=i*j/math.gcd(i,j)
#此时已经初始化好路径,下面思考如何计算
for i in range(2021):#因为每一次要选一个
        x=-1
        for y,u in enumerate(used):
                if not u and (x==-1 or dist[y]


 

你可能感兴趣的:(python)