POJ 1502 参考 ,但不知道为啥错了,个人测试应该没错
import java.util.Scanner;
/**
* POJ 类
* 描述:
* 作者: admin
* 时间: 2018年04月11日 17:37
*/
public class Main {
public static void main(String[] args) {
int nodeNum = 0;
Scanner sc = new Scanner(System.in);
nodeNum = Integer.parseInt(sc.nextLine());
int[][] graph = new int[nodeNum][nodeNum];
for (int i = 1; i < nodeNum; i++) {
String str = sc.nextLine();
String[] temp = str.split(" ");
for (int j = 0; j < i; j++) {
if (temp[j].equals("x")) {
graph[i][j] = Integer.MAX_VALUE;
} else {
graph[i][j] = Integer.parseInt(temp[j]);
}
}
}
int[] S=new int[nodeNum];//已计算的集合
int[] dis=new int[nodeNum];//距离
//初始化距离
for(int i=1;i<nodeNum;i++){
dis[i]=graph[i][0];
}
boolean[] flag=new boolean[nodeNum];//标记
flag[0]=true;//第0点已遍历
S[0]=0;//S:第0个点到第i个点的距离
for(int k=1;k<graph.length;k++){
//寻找最少路径
//在未获取的最短路径的顶点中,找到离v0最近的顶点
int min=Integer.MAX_VALUE;
int z=0;
for(int j=0;j<graph.length;j++){
if(flag[j]==false && dis[j]<min){
if(dis[j]<min){
z=j;//记录下标
min=dis[j];
}
}
}
//此时找到dis中离v0最近的一个点,将之加入到S
flag[z]=true;
S[z]=min;
//更新dis中每个点的最短路径
for(int j=0;j<graph.length;j++){
int temp=graph[z][j]==Integer.MAX_VALUE?Integer.MAX_VALUE:graph[z][j]+min;
if(flag[j]==false && temp<dis[j]){
dis[j]=temp;
}
}
}
int sum=0;
for(int i:S){
sum=Math.max(sum,i);
}
System.out.println(sum);
}
}