Agri-Net
8092 ワード
http://poj.org/problem?id=1258
View Code
1 #include<cstdio>
2 #include<cstring>
3 #include<algorithm>
4 #define MAXN 110
5
6 const int INF=1<<28;
7 using namespace std;
8 int g[MAXN][MAXN];
9 int dis[MAXN];
10 bool vis[MAXN];
11 int n,sum;
12 bool sprim()
13 {
14 memset(vis,false,sizeof(vis));
15 for(int i=1;i<=n;i++)
16 dis[i]=INF;
17 dis[1]=0;sum=0;
18 for(int i=1;i<=n;i++)
19 {
20 int min=INF,k=0;
21 for(int j=1;j<=n;j++)
22 {
23 if(!vis[j]&&dis[j]<min)
24 {
25 min=dis[j];
26 k=j;
27 }
28 }
29 if(min==INF) return false;
30 vis[k]=true;
31 sum+=min;
32 for(int j=1;j<=n;j++)
33 {
34 if(!vis[j]&&dis[j]>g[k][j])
35 {
36 dis[j]=g[k][j];
37 }
38 }
39 }
40 printf("%d
",sum);
41 return true;
42 }
43 int main()
44 {
45 while(scanf("%d",&n)!=EOF){
46
47 for(int i=1;i<=n;i++)
48 {
49 for(int j=1;j<=n;j++)
50 {
51 scanf("%d",&g[i][j]);
52 }
53 }
54 sprim();
55 }
56 return 0;
57
58 }
View Code