初音未来 • 8天前
#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;
}
评论:
请先登录,才能进行评论