题目大意
答案:10266837
解题思路
⭐⭐数据结构学好了,这个题就没有任何问题,否则还是直接放弃吧
🌙首先要把这个图按规则存储起来,我们一般都用邻接矩阵,而且因为是无向图,所以这个矩阵是对称的。
🌙过程中还涉及到求最小公倍数,这里我们需要知道:对于俩个数n和m,他们的最小公倍数是lcm,最大公约数是gcd,则有:n×m=gcd×lcm 所以可以先通过辗转相除法求最大公约数,进一步求最小公倍数。
🌙图存好后可以直接使用迪杰斯特拉算法或者佛洛依德算法求最短路径
代码解析
⭐迪杰斯特拉算法
public class Main {
public static void main(String[] args) {
int len = 2021;
int maxValue=1000000000;
int[][] matrix = new int[len][len];
for (int i = 0; i < len; i++) {
for (int j = i + 1; j < len; j++) {
if (j <= 21 + i) {
matrix[i][j] = lcm(j + 1, i + 1);
matrix[j][i]=lcm(j + 1, i + 1);
}else{
matrix[i][j]=maxValue;
matrix[j][i]=maxValue;
}
}
}
dijstra( matrix, 0);
System.out.