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 }
Prim()

  1. #include <stdio.h>
  2. #include <string.h>
  3. #define N 1000001
  4. int map[110][110];
  5. int vis[110];
  6. int dis[110];
  7. int n,m;
  8. void prim()
  9. {
  10. int ans=0;
  11. int i,j;
  12. memset(vis,0,sizeof(vis));
  13. memset(dis,0,sizeof(dis));
  14. for(i = 1; i <= n; i++)
  15. dis[i] = map[1][i];
  16. vis[1] = 1;
  17. for(i = 1; i <= n-1; i++)
  18. {
  19. int pos;
  20. int min;
  21. min = N;
  22. for(j = 1; j <= n; j++)
  23. {
  24. if(vis[j]==0&&min>dis[j])
  25. {
  26. pos=j;
  27. min=dis[j];
  28. }
  29. }
  30. vis[pos]  = 1;
  31. ans += min;
  32. for(j = 1; j <= n; j++)
  33. {
  34. if(vis[j]==0&& dis[j]>map[pos][j])
  35. dis[j]=map[pos][j];
  36. }
  37. }
  38. printf("%d\n",ans);
  39. return ;
  40. }
  41. int main()
  42. {
  43. int a,b,c;
  44. int i,j;
  45. while(scanf("%d %d",&n,&m)!=EOF)
  46. {
  47. for(i=1; i<=n; i++)
  48. {
  49. for(j=1; j<=n; j++)
  50. {
  51. map[i][j]=N;
  52. map[j][i]=N;
  53. }
  54. map[i][i]=0;
  55. }
  56. for(i=1;i<=m;i++)
  57. {
  58. scanf("%d%d%d",&a,&b,&c);
  59. if(c<map[a][b])
  60. {
  61. map[a][b]=c;
  62. map[b][a]=c;
  63. }
  64. }
  65. prim();
  66. }
  67. return 0;
  68. }

最小生成树(kruskal模版 Prim模板)的更多相关文章

  1. 最小生成树——Kruskal与Prim算法

    最小生成树——Kruskal与Prim算法 序: 首先: 啥是最小生成树??? 咳咳... 如图: 在一个有n个点的无向连通图中,选取n-1条边使得这个图变成一棵树.这就叫“生成树”.(如下图) 每个 ...

  2. 关于最小生成树 Kruskal 和 Prim 的简述(图论)

    模版题为[poj 1287]Networking. 题意我就不说了,我就想简单讲一下Kruskal和Prim算法.卡Kruskal的题似乎几乎为0.(●-`o´-)ノ 假设有一个N个点的连通图,有M条 ...

  3. 最小生成树 kruskal算法&prim算法

    (先更新到这,后面有时间再补,嘤嘤嘤) 今天给大家简单的讲一下最小生成树的问题吧!(ps:本人目前还比较菜,所以最小生成树最后的结果只能输出最小的权值,不能打印最小生成树的路径) 本Tianc在刚学的 ...

  4. 最小生成树kruskal 知识点讲解+模板

    0.前言 因为本人太蒟了 我现在连NOIP的初赛都在胆战心惊 并且我甚至连最小生成树都没有学过 所以这一篇博客一定是最详细的QAQ 哈哈 请您认真看完如果有疏漏之处敬请留言指正 感谢! Thanks♪ ...

  5. 最小生成树算法(Prim,Kruskal)

    边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...

  6. 稀疏图(邻接链表),并查集,最短路径(Dijkstra,spfa),最小生成树(kruskal,prim)

    全部函数通过杭电 1142,1162,1198,1213等题目测试. #include<iostream> #include<vector> #include<queue ...

  7. 稠密图(邻接矩阵),并查集,最短路径(Dijkstra,spfa),最小生成树(kruskal,prim)

    全部函数通过杭电 1142,1162,1198,1213等题目测试. #include<iostream> #include<vector> #include<queue ...

  8. 最小生成树(Kruskal和Prim算法)

    关于图的几个概念定义:          关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vi与vj都有路 ...

  9. 1.1.2最小生成树(Kruskal和Prim算法)

    部分内容摘自 勿在浮沙筑高台 http://blog.csdn.net/luoshixian099/article/details/51908175 关于图的几个概念定义: 连通图:在无向图中,若任意 ...

随机推荐

  1. 【Python】给程序加个进度条

    对于开发或者运维来说,使用 Python 去完成一些跑批任务,或者做一些监控事件是非常正常的情况.那么如何有效地监控任务的进度?除了在任务中加上 Log 外,还能不能有另一种方式来了解任务进展到哪一步 ...

  2. 【读书笔记-数据挖掘概念与技术】数据仓库与联机分析处理(OLAP)

    之前看了认识数据以及数据的预处理,那么,处理之后的数据放在哪儿呢?就放在一个叫“数据仓库”的地方. 数据仓库的基本概念: 数据仓库的定义——面向主题的.集成的.时变的.非易失的 操作数据库系统VS数据 ...

  3. 【大数据系列】MapReduce示例一年之内的最高气温

    一.项目采用maven构建,如下为pom.xml中引入的jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xml ...

  4. MFC 消息映射表和虚函数实现消息映射到底谁的效率高

    深入浅出MFC对于虚函数实现方式的缺点,它指出:虚函数耗费大量内存,系统最终将被这些额外负担拖垮. 但是现在对于容量巨大的白菜价格的内存来说,这种额外负担是否已经过时了呢~?    书中提到,虚函数表 ...

  5. java(3) 面向对象

    1.super关键字 * 使用super关键字调用父类的成员变量和成员方法.具体格式: super.成员变量 super.成员方法([参数1,参数2...]) * 使用super关键字调用父类的构造方 ...

  6. 阿里云ubuntu14.4上部署gogs

    以前曾经在centos上部署了gitlab,但因为买的配置比较低,实际效果并不理想,经常卡机.而且,gitlab配置相当麻烦,需要依赖很多被墙包支持.最近在用golang搞开发,顺道发现了gogs这款 ...

  7. 使用jetty的continuations实现"服务器推"

    在实际的开发中,我们可能会有这样的场景:许多客户端都连接到服务器端,当有某个客户端的消息的时候,服务器端会主动"推"消息给客户端,手机app的推送是一个典型的场景(IOS的推送都是 ...

  8. VI 你不知道的事

    1G 顶部 G 底部 ctrl+F 前进 ctrl+B 后退 /text   向前搜索 ?text 向后搜索 I i 插入字符串 a 光标后插入字符 A 跳到句末尾 wq 写入并退出 h k j l ...

  9. python nose测试框架全面介绍六--框架函数别名

    之前python nose测试框架全面介绍二中介绍了nose框架的基本构成,但在实际应该中我们也会到setup_function等一系列的名字,查看管网后,我们罗列下nose框架中函数的别名 1.pa ...

  10. python selenium操作表格式元素实例

    很多时候,网页上的布局都是表格形式的,如出下面这样的 这种网页类型在自动化中比较头痛,需要很多判断,下面就举个例子,这里以深圳出入境网页为例,http://yysl.sz3e.com/wsyysq/s ...