最小生成树prim模板

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <queue>
 7 #include <stack>
 8 #include <vector>
 9 #include <iomanip>
10 #include <map>
11 using namespace std;
12 const int maxn=1e3+10;
13 int n,m,g[maxn][maxn],vis[maxn],d[maxn];
14 int main(int argc, char *argv[])
15 {
16     scanf("%d",&n);
17     for(int i=1;i<=n;i++)
18            for(int j=1;j<=n;j++)
19                scanf("%d",&g[i][j]);
20     memset(d,0x3f3f3f3f,sizeof(d));
21     d[1]=0;
22     int ans=0;
23     for(int i=1;i<=n;i++)
24     {
25         int end=-1;
26         for(int j=1;j<=n;j++)
27         {
28             if(!vis[j]&&(end==-1||d[end]>d[j]))
29                 end=j;
30         }
31         ans+=d[end];
32         vis[end]=1;
33         for(int j=1;j<=n;j++)
34         {
35             if(!vis[j]&&d[j]>g[end][j])
36                 d[j]=g[end][j];
37         }
38     }
39     printf("%d\n",ans);
40     return 0;
41 }

 

posted @ 2018-10-14 18:20  huluxin  阅读(219)  评论(0编辑  收藏  举报