赞
踩
由于要求解的是最短路径,所以我们采用迪杰斯特拉算法,按照改模板去套代码,首先初始化数据,最小公倍数利用乘积除以最大公因数计算求得
- 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]<dist[x]):
- x=y
- used[x]=True
- for y,time in enumerate(g[x]):
- dist[y]=min(dist[y],dist[x]+time)
- print(dist[-1])
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。