题目描述
小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图中的最短路径。
小蓝的图由2021个结点组成,依次编号1至2021。对于两个不同的结点a, b,如果a和b的差的绝对值大于21,则两个结点之间没有边相连;如果a和b的差的绝对值小于等于21,则两个点之间有一条长度为a和b的最小公倍数的无向边相连。
例如:结点1和结点23之间没有边相连;结点3和结点24之间有一条无向边,长度为24;结点15和结点25之间有一条无向边,长度为75。
请计算,结点1和结点2021之间的最短路径长度是多少。
提示:建议使用计算机编程解决问题。
import java.util.Scanner;
public class Main {
static int[] a=new int[2022];
public static void main(String[] args) {
for(int i=2;i<=2021;i++){
a[i]=Integer.MAX_VALUE;
}
for(int i=1;i<=2020;i++){
for(int j=i+1;j<=2021;j++){
if(j-i<=21){
int num=Math.min(a[j],a[i]+lcm(i,j));
a[j]=num;
}
}
}
System.out.println(a[2021]);
}
public static int gcd(int a,int b){
if(b==0){
return a;
}
return gcd(b,a%b);
}
public static int lcm(int a,int b){
return a*b/gcd(a,b);
}
}