HDU 2544(最短路模板题——dijkstra)

题目

该题就是dijkstra的一个模板,主要是要记住模板,和对模板的使用

AC代码:

import java.io.*;
import java.math.*;
import java.math.BigInteger;
import java.util.*;

public class Main {
	static final int N=1050;
	static final int INF=0x3f3f3f3f;
	static int u,v,w,s,t,n,m;
	static int arr[][]=new int [N][N];
	static int a[]=new int [N];
	static boolean bool[]=new boolean[N];
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		for(;;) {
			
			n=sc.nextInt();//路口数量,1为商店所在地
			m=sc.nextInt();//路的数量
			if(n==0&&m==0)break;
			//A,B,C:AB之间有条路,需要时间C
			for(int i=0;i<N;i++) {
				for(int j=0;j<N;j++) {
					arr[i][j]=INF;
				}
			}
			for(int i=0;i<m;i++) {
				u=sc.nextInt();
				v=sc.nextInt();
				w=sc.nextInt();
				arr[u][v]=arr[v][u]=w;
			}
			s=1;
			t=n;
			dijkstra();
			System.out.println(a[t]);
		}
	}
	private static void dijkstra() {
		for(int i=1;i<N;i++) {
			a[i]=INF;
			bool[i]=false;
		}
		a[s]=0;
		for(int i=0;i<n;i++) {
			int k=-1;
			int min=INF;
			for(int j=1;j<=n;j++) {
				if(!bool[j]&&a[j]<min) {
					min=a[j];
					k=j;
				}
			}
			if(k==-1)break;
			bool[k]=true;
			for(int j=1;j<=n;j++) {
				if(!bool[j]&&a[k]+arr[k][j]<a[j]) {
					a[j]=a[k]+arr[k][j];
				}
			}
		}
	}
}

你可能感兴趣的:(最短路)