⛴李恒旭⚔♆§ • 1年前
using namespace std;
int vis[105], dist[INF]; int g[105][105];//mp int sum = 0; int n;//节点
void prim(int v) {
vis[v] = 1; //第一步
for (int i = 0; i < n; i++) {
dist[i] = g[v][i];
}//第二步
for (int i = 1; i < n; i++) {
int min = INF;
for (int j = 0; j < n; j++) { //第三步
if (!vis[j] && dist[j] < min) {
min = dist[j];
v = j;
}
}
vis[v] = 1; //第四步
for (int j = 0; j < n; j++) { //第五步
if (!vis[j] && dist[j] > g[v][j]) {
dist[j] = g[v][j];
}
}
}
}
int main() {
memset(vis, 0, sizeof vis);
memset(dist, INF, sizeof dist);
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> g[i][j];
}
}
//Prim算法 (如下)
prim(0);
for (int i = 0; i < n; i++) {
sum += dist[i];
}
cout << sum;
return 0;
}
评论:
请先登录,才能进行评论