算法分析与设计实验1

实验报告

课程名称 《算法分析与设计》 实验日期 2021年3月8日 至 2021年 3 月 15 日
学生姓名 戴子博 所在班级 计算机194 学号 2019212212130
实验名称 构造最小生成树
实验地点 寝室 同组人员

1.问题
采用Prim和Kruskal算法构造最小生成树过程
2.解析
Prim算法:选择一个点为初始顶点,计算所有与之相连接的点的距离,选择距离最短的点并标记,重复以上操作知道所有点都被标记过,最小生成树构造完成
Krusal算法:记录所有边的权值,不断找出权值最小的边加入集合,注意不能让边形成环,出现形成环的情况时跳过加入集合,选择下一条最小的边,直到所有的点都加入到集合后,最小生成树构造完成。
3.设计
Prim算法:

int Prim(int start){
	int index=start;
	int sum=0;
	int i,j;
	cout<<start;
	bool book[n];
	book[start]=true;//标记初始点 
	for(i=0;i<n;i++)
	    dist[i]=graph[start][i];//将每个与初始点邻接的点的距离存入dist 
	for(i=1;i<n;i++){
		int min=INF;
		for(j=0;j<n;j++){
			if(!book[j]&&dist[j]<min){//找到与index相邻的最近的点 
				min=dist[j];
				index=j;
			}
		}
		book[index]=true;//将已经记录的index点标记 
		cout<<"->"<<index;
		sum+=min;//记录总路径
		 
		for(j=0;j<n;j++){//重新初始化dist,找到与index邻接的点 
			if(!book[j]&&dist[j]>graph[index][j])
				dist[j]=graph[index][j];
		}
	}
	cout<<endl;
	return sum;
}

Kruskal:

int Kruskal(int x){
	int sum=0;
	make_set();
	for(int i=0;i<n;i++){
		if(find(node[i].a)!=find(node[i].b)){
			Union(node[i].a,node[i].b);
			sum+=node[i].l;
		}
	}
	return sum;
}

4.分析
Prim算法:O(n^2)
Kruskal算法:O(n)
5.源码
博客地址:https://blog.csdn.net/shaojinfu?spm=1000.2115.3001.5343
github源码地址:https://github.com/CNFierceman/Algorithm_homework.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值