只需要求最小公倍数建边,Floyd求最短路即可。
ps:数组要放在全局变量,放到main函数里会作为局部变量导致栈溢出
代码如下(示例):
#include#define ll long long #define INF 0x3f3f3f3f using namespace std; ll gcd(ll a,ll b){ if(a%b==0) return b; else return gcd(b,a%b); } long long Edge[2025][2025]; int main(){ memset (Edge,INF,sizeof(Edge)); for(int i=1;i<=2021;i++) for(int j=1;j<=2021;j++){ if(i==j) Edge[i][j]=0; else{ if(abs(i-j)<=21){ Edge[i][j]=i*j/gcd(i,j); } } } for(int k=1;k<=2021;k++) for(int i=1;i<=2021;i++) for(int j=1;j<=2021;j++){ if(Edge[i][j]>Edge[i][k]+Edge[k][j]) Edge[i][j]=Edge[i][k]+Edge[k][j]; } cout<



