您的位置:首页 > 其它

POJ 1502 MPI Maelstrom 最短路

2017-05-13 21:59 405 查看
题意:
给你一个不完全的矩阵,数字表示权值,x表示两点间不可达
由于自身到自身花费的时间为0,所以没有给出,由于i到j和j到i距离相同,互达时间相同
所以只给出了一半的临界矩阵。
根据给你的这个临界矩阵,让你来求从点1到其他点所花费最短时间集里面的的最大值。
其实这是一个很直接的最短路
package 最短路;

import java.util.Scanner;

public class A1502 {
static int n;
static int[][] map = new int[10000][10000];
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
scanner.nextLine();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j)
map[i][j] = 10000;//千万不要用Integer.Max_value
else 
map[i][j] =0;
for(int i=2;i<=n;i++)
for(int j=1;j<i;j++){
String s = scanner.next();
if(s.charAt(0)!='x')
map[i][j] = map[j][i] = Integer.parseInt(s);
}
dijstra();
}
public static void dijstra(){
int v=1;
int ans=-1;
int[] d = new int[10000];
int[] vis = new int[10000];
for(int i=1;i<=n;i++)
{
d[i] = 10000;
vis[i]=0;
}
d[1] = 0;
vis[1]=1;
for(int i=1;i<=n;i++)
{  
int min = 10000;
for(int j=1;j<=n;j++)
{
if(vis[j]==0&&d[j]<min)
{
min = d[j];
v = j;
}
}
vis[v]=1;
for(int j=1;j<=n;j++)
{
if(vis[j]==0&&d[v]+map[v][j]<d[j])
{
d[j] = d[v]+map[v][j];
}
}
}
for(int i=2;i<=n;i++)
if(d[i]>ans) ans=d[i];
System.out.println(ans);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: