#include <iostream>using namespace std;int a[105][105],b[105],n;int prim(int ii){ int i,j,k,min,ans=0,t; for(i=0;i<n;i++) b[i]=a[ii][i]; b[ii]=-1; for(i=1;i<n;i++) { for(min=2<<20,j=0;j<n;j++) if(min>b[j]&&b[j]!=-1) min=b[j],t=j; ans+=min; b[t]=-1; for(j=0;j<n;j++) if(a[t][j]<b[j]) b[j]=a[t][j]; } return ans;}int main(){ int i,j; while(cin>>n) { for(i=0;i<n;i++) for(j=0;j<n;j++) cin>>a[i][j]; cout<<prim(0)<<endl; } return 0;}
本文提供了一个使用C++实现的Prim算法示例,用于计算带权无向图的最小生成树。通过输入节点数量及边的权重,程序能够输出最小生成树的总权重。
1907

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



