登 录
题意:给定一个N及N*N的矩阵,求最小生成树。
#include<cstdio> #include<iostream> using namespace std; #define maxcost 10000000 int g[105][105]; int n; int vis[105],dist[105]; void prim(int v) { int i,j,min,dis,ans=0; memset(vis,true,sizeof(vis)); for(i=0;i<n;i++) { dist[i]=g[v][i]; } dist[v]=0;vis[v]=false; for(i=0;i<n;i++) { min=maxcost;int k=i; for(j=0;j<n;j++) if(dist[j]<min&&vis[j]) { k=j;min=dist[j]; } if(min!=maxcost) ans+=min; vis[k]=false; for(j=0;j<n;j++) { if(vis[j]&&dist[j]>g[k][j]) dist[j]=g[k][j]; } } printf("%d/n",ans); } int main() { while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&g[i][j]); prim(0); } return 0; }
抱歉!评论已关闭.