最小生成树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 }