
最小生成树(Kurskal、Prim)
BEconfidence
坚持才是胜利之道
展开
-
最小生成树prim算法实现
今天从志权师兄那里学会了最小生成树。所谓生成树,就是n个点之间连成n-1条边的图形。而最小生成树,就是权值(两点间直线的值)之和的最小值。 首先,要用二维数组记录点和权值。如上图所示无向图:int map[7][7]; map[1][2]=map[2][1]=4; map[1][3]=map[3][1]=2;原创 2015-05-27 13:47:48 · 818 阅读 · 0 评论 -
hdu1863
没有理由不对呀#include#include#includeusing namespace std;int cost[110][110];int mincost[110];bool used[110];int sett[110];int M;int prim(){ for(int i=0;i<=M;i++) { mincost[i]=214748364原创 2015-07-29 17:28:18 · 672 阅读 · 0 评论 -
hdu1162
#include#include#include#include#define INF 1000000000using namespace std;struct p{ double x,y;}spot[110];double cost[110][110];double mincost[110];bool used[110];int n;double prim()原创 2015-07-30 09:03:38 · 602 阅读 · 0 评论 -
hdu1863
#include#includeusing namespace std;int N,M;struct edge { int u,v,cost; bool operator < (const edge& rhs) const { return cost < rhs.cost; }};edge es[110];int sett[110];int原创 2015-07-30 08:48:07 · 788 阅读 · 0 评论 -
prim最小生成树算法题poj2485
开始想用kruskal算法自己写写runtime error#include#include#includeusing namespace std;int a[2510][25100];struct weight{ int a,b; int value; bool operator < (const weight & rhs) const {原创 2015-07-28 20:28:12 · 496 阅读 · 0 评论 -
最小生成树hdu1233
这个题今天一写就搞对了我只能说以后一定要少看题解要自己深入的去想只要是把思路想明白了代码还是容易敲出来的此题就是最小生成树按照先练权值最小的边的算法当然他们不会都在一个集合内那就用一下并查集把连好的两个点并到一个集合里最后他们应该就都属于一个集合了#include#include#includeusing namespace s原创 2015-07-28 10:07:45 · 797 阅读 · 0 评论 -
Kruskal算法求最小生成树
求加权连通图的最小生成树的算法。kruskal算法总共选择n- 1条边,(共n条边)所使用的贪婪准则是:从剩下的边中选择一条不会产生环路的具有最小耗费的边加入已选择的边的集合中。注意到所选取的边若产生环路则不可能形成一棵生成树。kruskal算法分e 步,其中e 是网络中边的数目。按耗费递增的顺序来考虑这e 条边,每次考虑一条边。当考虑某条边时,若将其加入到已选边的集合中会出现环路,则将其原创 2015-05-27 13:50:16 · 3182 阅读 · 0 评论 -
HDU1875 还是畅通工程
与之前的畅通工程类似,求最小生成树,只是要剔除不符合条件的边,还要判断是否是连通图(这个磨蹭了很长时间,只要判断加入集合的点数与题目给出的点数是否相等即可)。#include#include#include#includeusing namespace std;#define NUM 103struct point{ int x; int y;}pos[NUM]原创 2015-05-27 14:25:16 · 711 阅读 · 0 评论 -
HDU1233 还是畅通工程(并查集)
思路:考虑的是并查集,还有贪心算法中的克鲁斯卡尔算法,考虑的时候要借助 贪心算法还有并查集,建立树的概念,通过寻找父节点,看是否是满足的父节点,然后进行一些列的判断求解。#include#includeusing namespace std;struct dis{ int a,b,c;}s[10010];int cmp(dis x,dis y){ return原创 2015-05-27 14:03:26 · 924 阅读 · 0 评论 -
HDU1102 Constructing Roads (最小生成树)
Prim算法求最小生成树#include#include#includeusing namespace std;const int N=110;const int INF=0x3f3f3f3f;int n,ans;int map[N][N],dis[N],vis[N];void Prim(){ int i; for(i=1;i<=n;i++){原创 2015-05-27 13:49:32 · 865 阅读 · 0 评论 -
Prim算法(并查集)
普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小图例说明不可选可选已选(Vnew)此为原始的加权连通图。每条边一侧的数字原创 2015-05-27 13:31:33 · 1537 阅读 · 0 评论 -
HDU1897 继续畅通工程(最小生成树Prim)
题目分析:这个题和hdu 1233差不多,就是加了一个状态,因此我们可以先判断每条路的状态,如果是修好的,就让它们的成本是0;如果没修,就让成本给出的成本。这样问题的处理就和1233一样了。#include#include#includeusing namespace std;#define inf 0x3f3f3f3fint map[100][100];int s[100],vi原创 2015-05-27 16:47:19 · 721 阅读 · 0 评论 -
Prim
最小生成树模板学习的速度太慢了,浪费了不少的时间,必须抓紧了#includeusing namespace std;#define MAX_V 100#define INF 0x3f3f3f3fint cost[MAX_V][MAX_V];int mincost[MAX_V];bool used[MAX_V];int V;int prim(){ for(int i=原创 2015-08-06 19:41:03 · 639 阅读 · 0 评论