题意:给定一个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; }
本文介绍了一个使用Prim算法求解最小生成树(MST)的具体实现。该算法在一个给定的N*N权重矩阵中寻找连接所有顶点且总权重最小的树。通过详细展示Prim算法的C++实现代码,读者可以了解到如何初始化距离数组、更新最短路径并最终得到最小生成树的总权重。
274

被折叠的 条评论
为什么被折叠?



