返回题解分享
讨论 / 题解分享/ 帖子详情

路径(结果填空) - 题解

java版本

import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.Scanner;



public class dijkstra {
	static int N = 2023;
	static int INF = 0x3f3f3f3f;
	static int[][]g = new int[N][N];
	static int []dist = new int[N];
	static boolean[]flag = new boolean[N];
	static int n,m; //顶点和边数
	static int gcd(int a,int b) {
		return b==0?a:gcd(b, a%b);
	}
	
	static class Node implements Comparable<Node>{
		int v,dis; //节点的权值
		
		public Node(int idx, int i) {
			// TODO Auto-generated constructor stub
			this.v=idx;
			this.dis=i;
		}

		@Override
		public int compareTo(Node o) {
			// TODO Auto-generated method stub
			return this.dis-o.dis;
		}
	}
	//idx 为源点
	public static void dij(int idx) {
		PriorityQueue<Node> queue= new PriorityQueue<>();
		Arrays.fill(dist, 0,n+1,INF);
		Arrays.fill(flag, false);
		dist[idx]=0;
		
		queue.offer(new Node(idx,0));
		while(!queue.isEmpty()) {
			Node cur = queue.poll();
			int t = cur.v;
			if(flag[t]) continue;
			flag[t]=true; //该节点未被遍历
			for (int j = 1; j <= n; j++) {
				if(flag[j]==false&&dist[j]>dist[t]+g[t][j]) {
					dist[j]=dist[t]+g[t][j];
	
					//只要是大于当前距离的都放进去
					queue.offer(new Node(j,dist[j]));
				}
			}
		}
	}
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		n = scanner.nextInt();
		m = scanner.nextInt();
		
		//初始化邻接矩阵
		for (int i = 0; i <=n; i++) {
			Arrays.fill(g[i], INF);
			//对于自己 距离为0
			g[i][i]=0;
		}
		
		//输入边
//		for (int i = 0; i < m; i++) {
//			int u = scanner.nextInt();
//			int v = scanner.nextInt();
//			int w = scanner.nextInt();
//			g[u][v]=Math.min(g[u][v], w);
//		}
		for (int i = 1; i <= 2021; i++) {
			for (int j = 1; j <= 2021; j++) {
				if(Math.abs(i-j)>21) {
					g[i][j]=INF;
				}else {
					int gong = i/gcd(i, j)*j;
					g[i][j]=gong;
				}
				
			}
		}
		
		int st =1;
		dij(st);
		if(dist[n] == INF) {
		    System.out.println(-1); // 到达不了终点
		} else {
		    System.out.println(dist[n]); // 输出源点1到终点n的最短路径
		}
	}
}
0 回复 0 转发 0 喜欢 3 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!