1

噢莫加纳加加加  •  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;
}

评论:

请先登录,才能进行评论