您的位置:首页 > 其它

(最小生成树)ZOJ 1406 Jungle Roads

2017-04-23 21:58 381 查看
查看原题

题意

最小生成树

第一行输入有n个村庄,接下去n-1行分别输入村庄名,与其相邻的村庄数,相邻村庄名,两村庄之间的距离

思路

Prim

代码

#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int n,vnum,map[30][30],low[30],cost;
char v1,v2;
while(cin>>n&&n){
int total=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j)map[i][j]=0;
else map[i][j]=999999;
}
}
for(int i=1;i<n;i++){
cin>>v1>>vnum;
while(vnum--){
cin>>v2>>cost;
if(cost<map[v1-'A'+1][v2-'A'+1])
map[v1-'A'+1][v2-'A'+1]=map[v2-'A'+1][v1-'A'+1]=cost;
}
}
for(int i=1;i<=n;i++){
low[i]=map[1][i];
}
for(int i=1;i<n;i++){
int least=999999,leastnum=0;
for(int j=1;j<=n;j++){
if(low[j]<least&&low[j]!=0){
least=low[j];
leastnum=j;
}
}
if(leastnum!=0){
low[leastnum]=0;
total+=least;
for(int k=1;k<=n;k++){
if(map[leastnum][k]<low[k]){
low[k]=map[leastnum][k];
}
}
}
}
cout<<total<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: