来财

初音未来  •  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;
}

评论:

请先登录,才能进行评论