博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1102 Constructing Roads(kruskal || prim)
阅读量:5238 次
发布时间:2019-06-14

本文共 2050 字,大约阅读时间需要 6 分钟。

求最小生成树。有一点点的变化,就是有的边已经给出来了。所以,最小生成树里面必须有这些边,kruskal和prim算法都能够,prim更简单一些。有一点须要注意,用克鲁斯卡尔算法的时候须要将已经存在的边预处理一下,并查集转化为同一个祖先。记得要找他们的祖先再转化。普里姆算法仅仅须要将那些已经存在的边都初始化为0就能够了。

kruskal:

#include
#include
#include
#include
#define MAX 0x7fffffffusing namespace std;struct node{ int i,j,len;}gra[10005];int p[105];int n;int cmp(const void *a,const void *b){ return ((node *)a)->len - ((node *)b)->len;}int find(int x){ return p[x] == x? x: (p[x] = find(p[x]));}void kruskal(){ int i,sum = 0; for(i=1; i<=n*n; i++) { int x = find(gra[i].i); int y = find(gra[i].j); if(x != y) { sum += gra[i].len; p[x] = y; } } cout << sum << endl; return ;}int main(){ int i,j,m,c; while(cin >> n) { int k = 1; for(i=1; i<=n; i++) for(j=1; j<=n; j++) { cin >> c; gra[k].i = i; gra[k].j = j; gra[k].len = c; k ++; } cin >> m; for(i=1; i<=n; i++) p[i] = i; int a ,b; for(i=1; i<=m; i++) { cin >> a >> b; a = find(a);//注意这里。wa了几次。。。要找他们的祖先。。

。 b = find(b); p[a] = b; } qsort(gra+1,k-1,sizeof(gra[0]),cmp); kruskal(); } return 0; }

prim:

#include
#include
#include
#include
#define MAX 0x7fffffffusing namespace std;int gra[105][105];int n;void prim(){ int visit[105],now,i,j; int d[105]; memset(visit,0,sizeof(visit)); for(i=1; i<=n; i++) d[i] = MAX; now = 1;visit[1] = 1; d[1] = 0; for(i=1; i<=n; i++) { for(j=1; j<=n; j++) if(!visit[j] && d[j]>gra[now][j]) d[j] = gra[now][j]; int MIN = MAX; for(j=1; j<=n; j++) { if(!visit[j] && MIN > d[j]) MIN = d[now=j]; } visit[now] = 1; } int sum = 0; for(j=1; j<=n; j++) sum += d[j]; cout << sum << endl; return ;}int main(){ int i,j,c; while(cin >> n) { for(i=1; i<=n; i++) for(j=1; j<=n; j++) { cin >> c; gra[i][j] = c; } int m,a,b; cin >> m; for(i=1; i<=m; i++) { cin >> a >> b; gra[a][b] = gra[b][a] = 0; } prim(); } return 0; }

转载于:https://www.cnblogs.com/claireyuancy/p/6925604.html

你可能感兴趣的文章
手机验证码执行流程
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
jquery的contains方法
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
cookies相关概念
查看>>
CAN总线波形中ACK位电平为什么会偏高?
查看>>
MyBatis课程2
查看>>
桥接模式-Bridge(Java实现)
查看>>
网络请求返回HTTP状态码(404,400,500)
查看>>
Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
查看>>
Mac下使用crontab来实现定时任务
查看>>
303. Range Sum Query - Immutable
查看>>
图片加载失败显示默认图片占位符
查看>>
【★】浅谈计算机与随机数
查看>>
解决 sublime text3 运行python文件无法input的问题
查看>>
javascript面相对象编程,封装与继承
查看>>
Atlas命名空间Sys.Data下控件介绍——DataColumn,DataRow和DataTable
查看>>