hdu2544最短路径dijkstra

来源:互联网 发布:大毛拉遇害 知乎 编辑:程序博客网 时间:2024/06/07 00:02

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2544

解法:基本的dijkstra

package hdu2544_shortestpath;import java.util.Scanner;/** * submitted:Accepted * algorithm:dijkstra * @author Kindevil * */public class Main {static int[][] G;static int[] dist;static boolean[] visit;static int INF=0xFFFFFFF;static int n,m;static int a,b,c;public static void main(String args[]){Scanner cin=new Scanner(System.in);n=cin.nextInt();m=cin.nextInt();while( n!=0 && m!=0){G=new int[n+1][n+1];dist=new int[n+1];visit=new boolean[n+1];for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j) G[i][j]=0;else G[i][j]=INF;}}for(int i=0;i<m;i++){a=cin.nextInt();b=cin.nextInt();c=cin.nextInt();if(c<G[a][b]) G[a][b]=G[b][a]=c; //判重边}dijkstra(1);System.out.println(dist[n]);n=cin.nextInt();m=cin.nextInt();}}public static void dijkstra(int s){for(int i=1;i<=n;i++){dist[i]=G[s][i];visit[i]=false;}visit[1]=true;for(int x=2;x<=n;x++)//将n-1个顶点并入visit集合{int u=s;int mindis=INF;for(int i=2;i<=n;i++){if(!visit[i] && dist[i]<mindis){mindis=dist[i];u=i;}}visit[u]=true;for(int i=1;i<=n;i++){if(visit[i]) continue;if(dist[i]>dist[u]+G[u][i])//松弛{dist[i]=dist[u]+G[u][i];}}}}}


 

0 0