http://acm.hdu.edu.cn/showproblem.php?pid=1301
题目 | 算法 | 备注 |
数据格式:城市n+与n连通的城市+与该城市距离 | prime 最小生成树 | |
import java.util.Scanner;
public class Main {
public static void main(String[] args){
int n,i,j,k;
String c1,c2;
int p,q;
Scanner oo=new Scanner(System.in);
while(oo.hasNext()){
n=oo.nextInt();
if(n==0){break;}
int a[][]=new int[n+1][n+1];
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if(i==j){a[i][j]=0;}
else{a[i][j]=10000;}
}
}
for(i=1;i<n;i++){
c1=oo.next();
p=c1.charAt(0)-'A'+1;
k=oo.nextInt();
for(j=0;j<k;j++){
c2=oo.next();
q=c2.charAt(0)-'A'+1;
a[p][q]=oo.nextInt();
a[q][p]=a[p][q];
}
}
boolean f[]=new boolean[n+1];
int d[]=new int[n+1];
for(i=1;i<=n;i++){
d[i]=a[1][i];
}
int min=10000,tree=0,u=0;
for(i=0;i<n;i++){
min=10000;
for(j=1;j<=n;j++){
if(f[j]==false&&d[j]<min){
min=d[j];
u=j;
}
}
tree=tree+min;
f[u]=true;
for(j=1;j<=n;j++){
if(f[j]==false&&a[u][j]<d[j]){
d[j]=a[u][j];
}
}
}
System.out.println(tree);
}
}
}