#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
int G[110][110];
bool vis[110];
int dis[110];
int n, m;
void prim(int v) {
vis[v] = true;
dis[v] = 0;
for (int i = 1; i <= n; i++) {
int minn = INF;
for (int j = 1; j <= n; j++) {
if (!vis[j] && dis[j] < minn) {
minn = dis[j];
v = j;
}
}
vis[v] = true;
for (int j = 1; j <= n; j++) {
if (G[v][j] != 0 && !vis[j] && dis[j] > G[v][j])
dis[j] = G[v][j];
}
}
}
int main() {
cin >> n;
memset(vis, false, sizeof(vis));
memset(dis, INF, sizeof(dis));
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
cin >> G[i][j];
}
prim(1);
int ans = 0;
for (int i = 1; i <= n; i++)
ans += dis[i];
cout << ans;
return 0;
}
全部回复 共 0 条
还没有人回复。往下写第一条。
发表回复
登录后即可回复本帖,与出题人和同学一起讨论。
登录