pku 1251 Jungle Roads

来源:互联网 发布:嵌入式软件安装 编辑:程序博客网 时间:2024/05/22 09:41

http://acm.pku.edu.cn/JudgeOnline/problem?id=1251

题意求连接每一个村庄的路程的总和最短,用Prime算法求最小生成树。

#include <cstdio>#include <iostream>using namespace std;int number;int length[26][26];bool intree[26];int dis[26];void Read(){char a,c;int i,j,b,d;memset(length,999999,sizeof(length));for(i = 0;i < number-1;i ++){cin>>a;scanf("%d",&b);//起始位置for(j = 0;j < b;j ++){cin>>c;scanf("%d",&d);//终点位置length[a-'A'][c-'A'] = length[c-'A'][a-'A'] = d;//读书路程数据}}memset(intree,false,sizeof(intree));memset(dis,999999,sizeof(dis));intree[0] = true;for(i = 0;i < number;i ++)dis[i] = length[0][i];}void Prim(){int i,j,loc,min,total = 0;for(i = 0;i < number-1;i ++){min = 999999;for(j = 0;j < number;j ++){if(intree[j] == false && dis[j] < min){min = dis[j];loc = j;}}total = total + min;//求路程总和intree[loc] = true;for(j = 0;j < number;j ++){if(intree[j] == false){if(length[loc][j] < dis[j])dis[j] = length[loc][j];}}}printf("%d/n",total);}int main(){while(scanf("%d",&number),number){Read();Prim();}return 0 ;}
/*
9A 2 B 12 I 25B 3 C 10 H 40 I 8C 2 D 18 G 55D 1 E 44E 2 F 60 G 38F 0G 1 H 35H 1 I 353A 2 B 10 C 40B 1 C 200
21630
*/
原创粉丝点击