最小生成树(kruskal模版 Prim模板)
http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2144&cid=1186
最小生成树,最重要的是了解思想
稠密图用Prim,稀疏图用Kruskal
K(每次找最小的边连接,一条边连接两个点,所以单路就可以了)
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int bin[110];
5 struct node
6 {
7 int u,v,w;
8 }q[10001];
9
10 int cmp(const void *a,const void *b)//按距离从小到大排序
11 {
12 return (*(node *)a).w-(*(node *)b).w;
13 }
14 int find(int a)
15 {
16 if(a==bin[a])
17 return a;
18 else
19 bin[a]=find(bin[a]);
20 };
21 int main()
22 {
23 int n,m,i,j,sum,num;
24 int x,y;
25 while(~scanf("%d%d",&n,&m))
26 {
27 sum=0; num=0;
28 for(i=1; i<=n; i++)
29 bin[i]=i;
30 for(i=0; i<=m-1; i++)
31 scanf("%d%d%d",&q[i].u,&q[i].v,&q[i].w);
32 qsort(q,m,sizeof(q[0]),cmp);
33 这是重点思想 for(i=0; i<=m-1; i++)
34 {
35 x=find(q[i].u); y=find(q[i].v);
36 if(x!=y) //检查是否连通
37 {
38 sum+=q[i].w;//没连通的话加上距离
39 num++; //城市+1
40 bin[x]=y;
41 }
42 if(num==n-1)
43 break;
44 }
45 printf("%d\n",sum);
46 }
47 }
- #include <stdio.h>
- #include <string.h>
- #define N 1000001
- int map[110][110];
- int vis[110];
- int dis[110];
- int n,m;
- void prim()
- {
- int ans=0;
- int i,j;
- memset(vis,0,sizeof(vis));
- memset(dis,0,sizeof(dis));
- for(i = 1; i <= n; i++)
- dis[i] = map[1][i];
- vis[1] = 1;
- for(i = 1; i <= n-1; i++)
- {
- int pos;
- int min;
- min = N;
- for(j = 1; j <= n; j++)
- {
- if(vis[j]==0&&min>dis[j])
- {
- pos=j;
- min=dis[j];
- }
- }
- vis[pos] = 1;
- ans += min;
- for(j = 1; j <= n; j++)
- {
- if(vis[j]==0&& dis[j]>map[pos][j])
- dis[j]=map[pos][j];
- }
- }
- printf("%d\n",ans);
- return ;
- }
- int main()
- {
- int a,b,c;
- int i,j;
- while(scanf("%d %d",&n,&m)!=EOF)
- {
- for(i=1; i<=n; i++)
- {
- for(j=1; j<=n; j++)
- {
- map[i][j]=N;
- map[j][i]=N;
- }
- map[i][i]=0;
- }
- for(i=1;i<=m;i++)
- {
- scanf("%d%d%d",&a,&b,&c);
- if(c<map[a][b])
- {
- map[a][b]=c;
- map[b][a]=c;
- }
- }
- prim();
- }
- return 0;
- }
最小生成树(kruskal模版 Prim模板)的更多相关文章
- 最小生成树——Kruskal与Prim算法
最小生成树——Kruskal与Prim算法 序: 首先: 啥是最小生成树??? 咳咳... 如图: 在一个有n个点的无向连通图中,选取n-1条边使得这个图变成一棵树.这就叫“生成树”.(如下图) 每个 ...
- 关于最小生成树 Kruskal 和 Prim 的简述(图论)
模版题为[poj 1287]Networking. 题意我就不说了,我就想简单讲一下Kruskal和Prim算法.卡Kruskal的题似乎几乎为0.(●-`o´-)ノ 假设有一个N个点的连通图,有M条 ...
- 最小生成树 kruskal算法&prim算法
(先更新到这,后面有时间再补,嘤嘤嘤) 今天给大家简单的讲一下最小生成树的问题吧!(ps:本人目前还比较菜,所以最小生成树最后的结果只能输出最小的权值,不能打印最小生成树的路径) 本Tianc在刚学的 ...
- 最小生成树kruskal 知识点讲解+模板
0.前言 因为本人太蒟了 我现在连NOIP的初赛都在胆战心惊 并且我甚至连最小生成树都没有学过 所以这一篇博客一定是最详细的QAQ 哈哈 请您认真看完如果有疏漏之处敬请留言指正 感谢! Thanks♪ ...
- 最小生成树算法(Prim,Kruskal)
边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...
- 稀疏图(邻接链表),并查集,最短路径(Dijkstra,spfa),最小生成树(kruskal,prim)
全部函数通过杭电 1142,1162,1198,1213等题目测试. #include<iostream> #include<vector> #include<queue ...
- 稠密图(邻接矩阵),并查集,最短路径(Dijkstra,spfa),最小生成树(kruskal,prim)
全部函数通过杭电 1142,1162,1198,1213等题目测试. #include<iostream> #include<vector> #include<queue ...
- 最小生成树(Kruskal和Prim算法)
关于图的几个概念定义: 关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vi与vj都有路 ...
- 1.1.2最小生成树(Kruskal和Prim算法)
部分内容摘自 勿在浮沙筑高台 http://blog.csdn.net/luoshixian099/article/details/51908175 关于图的几个概念定义: 连通图:在无向图中,若任意 ...
随机推荐
- Qt下libusb-win32的使用方法
之前一直找不到适合WIN7下的Tiny6410的USB下载软件,正好这几天开始学习USB,所以打算自己写一个专门用于Tiny6410的WIN7下的USB下载软件. 发现了libusb这个库可以用作无驱 ...
- 今日Java——Cay Horstmann访谈
这是本人在InfoQ中文站审校的文章,原文链接是:http://www.infoq.com/cn/articles/java_cay_horstmann,感觉内容很不错,分享给大家看看. 近日Info ...
- c++ 类前置声明【转】
[转自 here] 在编写C++程序的时候,偶尔需要用到前置声明(Forward declaration).下面的程序中,带注释的那行就是类B的前置说明.这是必须的,因为类A中用到了类B,而类B的声明 ...
- 整理一系列优秀的Android开发源码
转:http://www.cnblogs.com/feifei1010/archive/2012/09/12/2681527.html 游戏类: 一.15个Android游戏源码(是以andengin ...
- 国产手机插入mac os 系统中无法被识别的解决方法
一些国产手机插入mac os 系统中无法被识别,在命令行输入 system_profiler SPUSBDataType在, 然后将魅蓝note的vendor id 添加至 ~/.android/ad ...
- Android短信发送器_08
1.string xml代码 <?xml version="1.0" encoding="utf-8"?> <resources> &l ...
- 【CF860E】Arkady and a Nobody-men 长链剖分
[CF860E]Arkady and a Nobody-men 题意:给你一棵n个点的有根树.如果b是a的祖先,定义$r(a,b)$为b的子树中深度小于等于a的深度的点的个数(包括a).定义$z(a) ...
- [Log]ASP.NET之HttpModule 事件执行顺序
ASP.Net下的HttpModule是基于事件的处理模型,这使得我们在选择事件监听和处理的时候有更多选择.下面是对HttpModule有关事件被触发的监测: 有关代码如下 using System; ...
- jQuery里面ajax请求的封装
为了避免ajax漫天飞,我们需要对jQuery的代码进行封装,封装代码: function api_request(name, params, cb, scope, async, el) { if ( ...
- 在CentOS6.8下安装Docker
在CentOS6.8下安装Docker 一.查看系统版本 [root@localhost opt]# uname -a Linux localhost.localdomain -.el6.x86_64 ...