3 0 1 2 1 0 1 2 1 0
2
1 #include<bits/stdc++.h> 2 using namespace std; 3 int g[101][101]; //邻接矩阵 4 int minn[101]; //minn[i]存放蓝点i与白点相连的最小边权 5 bool u[101]; //u[i]=True,表示顶点i还未加入到生成树中 6 int n,i,j; 7 int main() 8 { 9 cin >> n; 10 for (i = 1; i <= n; i++) 11 for (j = 1; j <= n; j++) 12 cin >> g[i][j]; 13 memset(minn,0x7f,sizeof(minn)); //初始化为maxint 14 minn[1] = 0; 15 memset(u,1,sizeof(u)); //初始化为True,表示所有顶点为蓝点 16 for (i = 1; i <= n; i++) 17 { 18 int k = 0; 19 for (j = 1; j <= n; j++) //找一个与白点相连的权值最小的蓝点k 20 if (u[j] && (minn[j] < minn[k])) 21 k = j; 22 u[k] = false; //蓝点k加入生成树,标记为白点 23 for (j = 1; j <= n; j++) //修改与k相连的所有蓝点 24 if (u[j] && (g[k][j] < minn[j])) 25 minn[j] = g[k][j]; 26 } 27 int total = 0; 28 for (i = 1; i <= n; i++) //累加权值 29 total += minn[i]; 30 cout << total << endl; 31 return 0; 32 }
原文:https://www.cnblogs.com/ljy-endl/p/11279527.html