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. Elasticsearch学习之深入聚合分析三---案例实战

    1. 统计指定品牌下每个颜色的销量 任何的聚合,都必须在搜索出来的结果数据中进行,搜索结果,就是聚合分析操作的scope GET /tvs/sales/_search { , "query& ...

  2. sencha touch 类的使用

    sencha touch 有一套自己的类机制,可以以面向对象的方式去写代码,封装业务逻辑,sencha touch 的组件.插件.api等都建立在这一套类机制的上面 在实际开发中,我们需要遵循这一套机 ...

  3. 使用私钥.pem和SecureCRT登陆linux系统

    将密钥上传到一台自己的linux主机,下面举例文件名为 key.pemchmod 600 key.pem改写密钥格式为 OpenSSH,如果询问passphrase可以留空(直接回车)ssh-keyg ...

  4. 2015.7.8js-05(简单日历)

    今天做一个简单的小日历,12个月份,鼠标移动其中一个月份时添加高亮并显示本月的活动.其实同理与选项卡致.不过是内容存在js里 window.onload = function(){ var oMain ...

  5. docker自动开启端口转发功能

    yum -y install epel-release yum -y install docker-io service docker start docker pull haproxy # 此时自动 ...

  6. docker link 过时不再用了?那容器互联、服务发现怎么办?

    在 1-2 年前,Docker 所有容器都连接于默认的桥接网络上,也就是很多老文章鼓捣的 docker0 桥接网卡.因此实际上默认情况下所有容器都是可以互联的,没有隔离,当然这样安全性不好.而服务发现 ...

  7. Java虚拟机四 常用Java虚拟机参数

    主要涉及的知识点: 1.跟踪Java虚拟机的垃圾回收和类加载等信息: 2.配置Java虚拟机的堆空间: 3.配置永久区和Java栈. 4.学习虚拟机的服务器和客户端模式. 1.1 跟踪垃圾回收 Jav ...

  8. STS没有找到Dynamic Web Project

    解决:安装JavaEE插件 help-> install new software-> 选择sts对应的eclipse版本站点,如eclipse版本4.09选择2018-09.4.10选择 ...

  9. css---媒体查询

    简单示例: <style type="text/css"> /* 小于 300的时候 */ @media screen and (max-width: 400px){ ...

  10. 记我的第一个python爬虫

    捣鼓了两天,终于完成了一个小小的爬虫代码.现在才发现,曾经以为那么厉害的爬虫,在自己手里实现的时候,也不过如此.但是心里还是很高兴的. 其实一开始我是看的慕课上面的爬虫教学视屏,对着视屏的代码一行行的 ...