最小生成树(Prim算法)
来源:互联网 发布:atheros linux驱动 编辑:程序博客网 时间:2024/06/09 15:59
#include <iostream>#include <cstdio>#include <cstdlib>#include <list>#include <stack>#include <algorithm>using namespace std;int main(){const int max=100000000; int T; scanf("%d",&T); while (T--) { int n; scanf("%d",&n); int i,j,A[100][100]; int d[100]; bool record[100]={false}; for (i=0;i<=n-1;i++) for (j=0;j<=n-1;j++) scanf("%d",&A[i][j]); for (i=0;i<=n-1;i++) d[i]=max; int min; int pos; int ans=0; d[0]=0; for (i=0;i<=n-1;i++) { min=max; for (j=0;j<=n-1;j++) if (!record[j] && d[j]<min) { pos=j; min=d[pos]; } if (min==max) continue; ans+=min; record[pos]=1; for (j=0;j<=n-1;j++) if (!record[j] && A[pos][j]<d[j]) d[j]=A[pos][j]; } printf("%d\n",ans); } return 0;}