码迷,mamicode.com
首页 > 其他好文 > 详细

POJ - 1251 Jungle Roads

时间:2016-07-22 22:55:47      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://poj.org/problem?id=1251

 

Sample Input

9
A 2 B 12 I 25
B 3 C 10 H 40 I 8
C 2 D 18 G 55
D 1 E 44
E 2 F 60 G 38
F 0
G 1 H 35
H 1 I 35
3
A 2 B 10 C 40
B 1 C 20
0
Sample Output

216
30

 

分析:最小生成树模板题,注意将字母转化为数字ch-‘A‘+1,输入时%s%d,或者使用cin避免空格回车造成的影响

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stack>
 6 #include<math.h>
 7 #include<queue>
 8 #include<map>
 9 #include<time.h>
10 using namespace std;
11 
12 #define INF 0x3f3f3f3f
13 #define N 153000
14 
15 int maps[200][200],dist[50],vis[50],n;
16 
17 void Init()
18 {
19     for(int i=1; i<=26; i++)
20     {
21         for(int j=1; j<=26; j++)
22         {
23             if(i==j)
24                 maps[i][j]=0;
25             else
26                 maps[i][j]=maps[j][i]=INF;
27         }
28 
29         dist[i]=INF;
30         vis[i]=0;
31     }
32 }
33 
34 int prim(int s)
35 {
36     int i,j;
37 
38     vis[s]=1;
39     for(i=1;i<=26;i++)
40         dist[i]=maps[s][i];
41 
42     int sum=0;
43     for(i=1;i<n;i++)
44     {
45         int Min=INF,index=-1;
46         for(j=1;j<=26;j++)
47         if(!vis[j]&&Min>dist[j])
48         {
49             Min=dist[j];
50             index=j;
51         }
52         sum+=Min;
53         vis[index]=1;
54 
55         for(j=1;j<=26;j++)
56             if(!vis[j]&&dist[j]>maps[index][j])
57             dist[j]=maps[index][j];
58 
59     }
60     return sum;
61 }
62 
63 int main()
64 {
65     int i,j,m,c,h1,h2;
66     char ch1,ch2;
67 
68     while(scanf("%d", &n), n)
69     {
70         Init();
71         for(i=1; i<n; i++)
72         {
73             cin>>ch1>>m;
74             h1=ch1-A+1;
75             for(j=1; j<=m; j++)
76             {
77                 cin>>ch2>>c;
78                 h2=ch2-A+1;
79                 maps[h1][h2]=maps[h2][h1]=c;
80                 ///printf("%d %d %d\n", h1,h2,maps[h1][h2]);
81             }
82         }
83 
84         int ans=prim(1);
85 
86         printf("%d\n", ans);
87     }
88     return 0;
89 }

 

POJ - 1251 Jungle Roads

标签:

原文地址:http://www.cnblogs.com/weiyuan/p/5697128.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!