最小生成树之Prim算法

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define mod 1000000007
#define IOS ios::sync_with_stdio(false)
#define endl '\n'
using namespace std;
typedef long long ll;
const int maxn = 1e3 + 10;
int vis[maxn], d[maxn], mat[maxn][maxn];
int n, cur, ans = 0;
int main() {
   
	scanf("%d", &n);
	for (int i = 1;i <= n;++i) {
   
		for (int j = 1;j <= n;++j) {
   
			scanf("%d", &mat[i][j]);//读入邻接矩阵
		}
	}
	memset(vis, 0, sizeof(vis));//初始化
	memset(d, INF, sizeof(d));//初始化
	d[1] = 0;//第一个顶点到自己的距离为0
	for (int i = 1;i <= n;++i) {
   
		cur = -1;
		for (int j = 1;j <= n;++j) {
   
			if (!vis[j] && (cur == -1 || d[cur] > d[j])) {
   
				cur = j;//维护当前树所能到达的顶点的路径最小值所对应的顶点
			}
		}
		ans += d[cur];
		vis[cur] = 1;//标记此顶点已访问过
		for (int j = 1;j <= n;++j) {
   
			if (!vis[j] && d[j] > mat[cur][j]) {
   
				d[j] = mat[cur][j];//如果最新入树的顶点到其相连顶点的距离小于旧树到
				//对应顶点的距离 则更新最小值
			}
		}
	}
	printf("%d", ans);
	return 0;
}
全部评论

相关推荐

到我怀里来:教育背景不用写主修课程,还有你写班级排名是什么意思?咋不写寝室排名呢😂要写就写年纪排名。得了那么多奖结果项目经历什么技术细节都不写清楚,把技术细节写清楚,用了什么技术解决了什么问题,“用了python语言、用了SQL语言”,有这样写的?hr一看就知道你是包装的或者比赛的奖是混的,你什么技术细节都不懂。校内职务全删了,什么三好学生、文明寝室这些你写上去干嘛?重复的奖学金你写三次干嘛?自我评价写那么多干嘛?谁想看这些
点赞 评论 收藏
分享
2024-11-26 15:41
门头沟学院 Java
点赞 评论 收藏
分享
联洲 嵌入式软件开发 总包48w(sp+3档)
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务