> 文档中心 > 路径—省赛java

路径—省赛java


十二届蓝桥杯省赛真题E题—路径

路径—省赛java

路径—省赛java

蓝桥填空题比较好的地方就是可以直接暴力循环,不用优化算法,不用担心超时

题解:

public class 路径 {static final int n = 2021;//最小公约数static int gcd(int a,int b) {return b == 0? a : gcd(b,a%b);}//最小公倍数static int lcm(int a,int b) {return a*b/gcd(a,b);}    public static void main(String[] args) {//1.记录各个点之间的距离,大于21的为0    int[][] floyd = new int[n][n];//下标代表两个结点,floyd[][]代表两个节点间距离    for(int i = 0;i < n;i++)     for(int j = i+1;j < n;j++)    if(j <= i+21)    floyd[i][j] = floyd[j][i] = lcm(i+1,j+1);    //暴力循环    for(int i = 0;i < n;i++)    for(int j = 0;j < n;j++)    for(int k = 0;k < n;k++)    //把最小长度赋值给floyd[][]    if(floyd[i][j] != 0 && floyd[j][k] != 0 && (floyd[i][k] == 0 || floyd[i][k] > floyd[i][j]+floyd[j][k]))    floyd[i][k] = floyd[i][j] + floyd[j][k];    System.out.println(floyd[0][n-1]);}}