您的位置:首页 > Web前端 > JavaScript

POJ 2387 Til the Cows Come Home 最短路 Dijstra

2017-05-13 17:13 405 查看
题意:给出两个整数T,N,然后输入一些点直接的距离,求N和1之间的最短距离。。
思路:dijkstra求单源最短路,但是要注意判重。

import java.util.*;
public class Main{
public static void main(String args[]){
Scanner in=new Scanner(System.in);
int c=0;
int t=in.nextInt();//输入顺序错误WA了N次!!!看清题意!
int n=in.nextInt();
int dist[]=new int[n+1];//先输入再确定数组大小!!!RE了N次!
int[][] w=new int[n+1][n+1];
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
w[i][j]=Integer.MAX_VALUE;
}
}
for(int i=0;i< t;i++){//输入两点及之间距离
int sn=in.nextInt();
int en=in.nextInt();
c=in.nextInt();
if(c< w[sn][en])
w[sn][en]=w[en][sn]=c;
}
dijkstra(n,w,dist);
System.out.println(dist[1]);
}

public static void dijkstra(int v ,int[][] a, int[] dist){//最短路径dijkstra算法
int nn = dist.length - 1 ;
boolean[] s = new boolean[nn+1];
//初始化
for(int i = 1; i <= nn; i++)
dist[i] = a[v][i];
dist[v] = 0;
s[v] = true;
for(int i = 1; i < nn; i++){
int temp =Integer.MAX_VALUE;
int u = v;
for(int j = 1; j < nn; j++){
if(!s[j] && dist[j] < temp&&dist[j]>0){
u = j;
temp = dist[j];

4000
}
}
s[u] = true;  //找到了第一个并入S的节点
for(int j = 1; j <= nn; j++)
if(!s[j] &&dist[u]+a[u][j]< dist[j]&& a[u][j] < Integer.MAX_VALUE)
dist[j] =dist[u]+a[u][j];
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: