輸入保證至少存在1條商店到賽場的路線。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
int maxnum=0x3f3f3f;
Scanner cin=new Scanner(System.in);
while(cin.hasNext()){
int N=cin.nextInt(); //N代表路口數
int M=cin.nextInt(); //M代表路數
if(N==0&&M==0)break;
int[][] graph=new int[200][200];
int[] dist=new int[200];
boolean[] isV=new boolean[200];
Arrays.fill(isV, false);
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++)
if(i==j)graph[i][j]=0;
else graph[i][j] = maxnum;
}
for(int i=0;i<M;i++){
int p1=cin.nextInt();
int p2=cin.nextInt();
graph[p2][p1]=graph[p1][p2]=cin.nextInt();
}
for(int i=1;i<=N;i++){
dist[i]=graph[1][i];
}
dist[1]=0;
isV[1]=true;
int min=0;
int v=0;
for(int i=1;i<N;i++){ //關鍵代碼
min=maxnum; //..
for(int j=1;j<=N;j++){
if(isV[j]!=true&&dist[j]<min)
{
min=dist[j];
v=j;
}
}
isV[v]=true;
for(int j=1;j<=N;j++){
if(isV[j]!=true&&dist[j]>dist[v]+graph[v][j]){
dist[j]=dist[v]+graph[v][j];
}
}
}
System.out.println(dist[N]);
}
}
}
思路:運用Floyd算法求解最短路徑
import java.nio.file.Path;
import java.util.*;
public class Main2544 {
public static void main(String[] args){
Scanner cin=new Scanner(System.in);
int maxnum=0x3f3f3f;
while(cin.hasNext()){
int N=cin.nextInt(); //路口數
int M=cin.nextInt(); //路數
if(N==0&&M==0)break;
int[][] graph=new int[200][200];
int dist[][]=new int[200][200];
boolean[] isV=new boolean[200];
String[][] path=new String[200][200];
Arrays.fill(isV, false);
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++)
{if(i==j)graph[i][j]=0;
else graph[i][j] = maxnum;
path[i][j]=new Integer(i).toString();
}
}
for(int i=0;i<M;i++){
int p1=cin.nextInt();
int p2=cin.nextInt();
graph[p2][p1]=graph[p1][p2]=cin.nextInt();
}
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++){
dist[i][j]=graph[i][j];
if(dist[i][j]!=maxnum)path[i][j]="->"+new Integer(j).toString();
else path[i][j]="";
}
for(int k=1;k<=N;k++) //關鍵代碼
for(int i=1;i<=N;i++) //可順帶求出途徑路徑
for(int j=1;j<=N;j++)
if(dist[i][k]+dist[k][j]<dist[i][j]){
dist[i][j]=dist[i][k]+dist[k][j];
path[i][j]=path[i][k]+path[k][j];
}
System.out.println(dist[1][N]);
// System.out.println(path[1][N]);
}
}
}