http://acm.hdu.edu.cn/showproblem.php?pid=2066
题目 | 算法 | 备注 |
给出城市间花费的时间,多个起点,多个终点,求最短时间 | 弗洛伊德 | |
import java.util.Scanner;
public class Main {
static int a[][]=new int[1001][1001];
public static void main(String[] args) {
int m,i,j,k,t,s,d,p,q,c;
Scanner oo=new Scanner(System.in);
while(oo.hasNext()){
t=oo.nextInt();
s=oo.nextInt();
d=oo.nextInt();
for(i=1;i<=1000;i++){
for(j=1;j<=1000;j++){
a[i][j]=100000000;
}
}
m=0;
for(i=0;i<t;i++){
p=oo.nextInt();
q=oo.nextInt();
if(p>m){m=p;}
if(q>m){m=q;}
c=oo.nextInt();
if(c<a[p][q]){
a[p][q]=c;
a[q][p]=c;
}
}
int start[]=new int[s];
int end[]=new int[d];
for(i=0;i<s;i++){
start[i]=oo.nextInt();
}
for(i=0;i<d;i++){
end[i]=oo.nextInt();
}
for(k=1;k<=m;k++){
for(i=1;i<=m;i++){
if(a[i][k]!=100000000){
for(j=1;j<=m;j++){
if(a[i][k]+a[k][j]<a[i][j]){
a[i][j]=a[i][k]+a[k][j];
}
}
}
}
}
int min=100000000;
for(i=0;i<s;i++){
for(j=0;j<d;j++){
if(a[start[i]][end[j]]<min){
min=a[start[i]][end[j]];
}
}
}
System.out.println(min);
}
}
}