蓝桥杯官网填空题(路径)

博客围绕小蓝定义的特别图展开,该图有2021个结点,编号1至2021,两结点差绝对值小于等于21时有长度为最小公倍数的无向边,否则无边。要求计算结点1和结点2021之间的最短路径长度,建议用编程解决。

题目描述

小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图中的最短路径。
小蓝的图由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);
    }
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值