最短路
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 15312 Accepted Submission(s): 6497
Problem Description
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?
Input
输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。
输入保证至少存在1条商店到赛场的路线。
输入保证至少存在1条商店到赛场的路线。
Output
对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
Sample Input
2 1
1 2 3
3 3
1 2 5
2 3 5
3 1 2
0 0
Sample Output
3 2
import java.util.Arrays; import java.util.Scanner; /** * @功能Function Description: 最短路径dijkstra * @开发环境Environment: eclipse * @技术特点Technique: * @版本Version: Scanner * @作者Author: follow your dreams * @日期Date: 20120809 * @备注Notes: 求从源点到终点的最短路径。 * @链接: http://acm.hdu.edu.cn/showproblem.php?pid=2544 */ public class HD2544_1_20120821 { public static int[][] map; public static int[] dist; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n, m;//n为路口的个数,也为赛场所在地,m为有多少条路 int vertex1, vertex2, value; while(true) { n = sc.nextInt(); m = sc.nextInt(); if(m+n == 0) { break; } map = new int[n+1][n+1]; dist = new int[n+1]; for(int i=1; i<=m; i++) { vertex1 = sc.nextInt(); vertex2 = sc.nextInt(); value = sc.nextInt();//由于value是大于1的,不用把map的所有的值赋为Integer.MAX_VALUE map[vertex1][vertex2] = value; map[vertex2][vertex1] = value; } System.out.println(dijkstra(n)); } } public static int dijkstra(int n) { int len = dist.length; boolean tag[] = new boolean[n+1]; Arrays.fill(dist, Integer.MAX_VALUE); dist[1] = 0; int x = 0; for(int i=1; i<=n; i++) { int min = Integer.MAX_VALUE; for(int j=1; j<len; j++) {//找到dist中的最小值 if(!tag[j] && min>dist[j]) { min = dist[j]; x = j;//最小值在dist中的位置 } } tag[x] = true;//将其表以为已经用过的顶点 for(int j=1; j<len; j++) { if(map[x][j]!=0 && dist[j]>dist[x]+map[x][j]) { dist[j] = dist[x]+map[x][j]; } } } //show(); return dist[n]; } // public static void show() { // for(int i=0; i<dist.length; i++) { // System.out.print(dist[i] + " "); // } // System.out.println(); // } }