一个连通图的生成树是图的极小连通子图。它包含图中的所有顶点,并且只含尽可能少的边。若砍去它的一条边,就会使生成树变成非连通图;若给它增加一条边,则会形成一条回路。
最小生成树有如下性质:
1.最小生成树非唯一,可能有多个最小生成树;
2.最小生成树的边的权值之和总唯一,而且是最小的;
3.最小生成树的边数为顶点数减1。
构造最小生成树可以有多种算法。其中多数算法利用了最小生成树的下列一种...
分类:
编程语言 时间:
2015-05-14 22:09:36
阅读次数:
198
最小生成树树 prim算法,第一次写
#include
#define maxn 100+5
#define inf 1<<30
using namespace std;
int n;
int mapp[maxn][maxn];
int visit[maxn];
int d[maxn];
int re;
void prim()
{
fill(visit,visit+maxn,0);
fill...
分类:
其他好文 时间:
2015-05-14 20:35:00
阅读次数:
117
图的定义图(graph)G = (V,E)由顶点(vertex)的集V和边(Edge)的集E组成。有时也把边称作弧(arc),如果点对(v,w)是有序的,那么图就叫做有向的图(有向图)。顶点v和w邻接(adjacent)当且仅当(v,w)属于E。如果无向图中从每一个顶点到其他每个顶点都存在一条路径,则称该无向图是连通的(connected)。具有这样性质的有向图称为是强连通的(strongly co...
分类:
编程语言 时间:
2015-05-12 09:33:55
阅读次数:
853
prim就是一个让树长大的过程 弄一个集合 从一个点开始不断向外搜索 找到权值最小的点 放进集合中 从这个集合所连的边再向外找 1 #define USED 0 2 #define NOADJ -1 3 void Prim(MaxtrixGraph G) 4 { 5 int i,j,k,mi...
分类:
编程语言 时间:
2015-05-10 23:57:45
阅读次数:
175
最小生成树,刚刚学了Prim算法。对每条边变的权值进行预处理,c[i][j] = c[i][j] + p[i] + p[j] 其中c[i][j]为输入的权值,p[i],p[j]为连接这两个节点所需的费用。#include#include#include#includeusing namespace ...
分类:
Web程序 时间:
2015-05-07 00:23:01
阅读次数:
187
The Semantics of Data
0引例
1 The Binding of a Data Member
2Data Member Layout
3Data Member 的存取
4继承与Data Member
5Object Member Efficiency
6Pointer to Members
时隔很久,再次拾起<>一书.期间因为学习<<C++ Prim...
分类:
其他好文 时间:
2015-05-04 10:11:25
阅读次数:
136
最大生成树,只需要变一下改变值的部分就可以了。
尝试了一下运用并查集的kruskal算法,与prim相比各有利弊吧,还要根据数据特点适当选取。
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int n,m,a,b,c,par[1005],rankk[1005];
struc...
分类:
其他好文 时间:
2015-05-01 10:44:48
阅读次数:
130
最小生成树算法。
#include
#include
#include
#include
#include
#include
using namespace std;
const int INF = 1000000000;
int cost[105][105];
int mincost[105];
bool used[105];
int n,a;
int prim() {
for(int...
分类:
Web程序 时间:
2015-04-30 21:57:26
阅读次数:
143
越来越明白了一个道理:你写不出代码的原因只有一个,那就是你没有彻底理解这个算法的思想!!
以前写过最小生成树,但是,水了几道题后,过了一段时间,就会忘却,一点也写不出来了。也许原因只有一个,那就是我没有彻底理解这两种算法。
主题:
其实,求最小生成树有两个要点,一个是权值最小,还有一个就是这个图必须是树。而Prime和Kruskal的不同之处在于两者选择的变量不同,Prime选择的是始终保持...
分类:
编程语言 时间:
2015-04-26 09:23:26
阅读次数:
186
Kruskal算法:
1:按照边的权值的顺序从小到大查看一遍,如果不产生圈(重边也算),就把当前这条边加入到生成树中,基本算法证明和prim一样
2:如何判断是否产生负圈,假设现在要把连接顶点u和顶点v的边e加入到生成树中,如果加入之前u和v不在同一个联通分量里,那么加入e也不会产生负圈,反之,如果u和v在同一个连通分量里,那么一定会产生圈,可以使用并查集高效的判断是否属于同一个连通分量
P...
分类:
编程语言 时间:
2015-04-24 22:48:54
阅读次数:
187