噢莫加纳加加加 • 21天前
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int g[105][105];
int dis[105], n;
bool vis[105];
void prim(int v) {
vis[v] = 1;
dis[v] = 0;
for (int i = 0; i < n; i++) {
if (g[v][i] != 0) {
dis[i] = g[v][i];// dis 4 8 17
}
}
for (int i = 0; i < n; i++) {
int min = inf;
for (int j = 0; j < n; j++) {
if (!vis[j] && dis[j] < min) {
min = dis[j];//min 4 8
v = j;//v=0
}
}
vis[v] = 1;
for (int j = 0; j < n; j++) {
if (!vis[j] && g[v][j] != 0 && dis[j] > g[v][j]) {
dis[j] = g[v][j];
}
}
}
}
int main() {
cin >> n;
int sum = 0;
memset(dis, inf, sizeof(dis));
memset(vis, 0, sizeof(vis));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> g[i][j];
}
}
int t = 1;
prim(t);
for (int i = 0; i < n; i++) {
sum = sum + dis[i];
}
cout << sum;
return 0;
}
评论:
请先登录,才能进行评论