Prime算法生成最小生成树
虽说是生成树,但我只将生成的边输出了。至于怎么用这些边来创建树。。。我不知道_(:з」∠)_
//Prime方法生成最小生成树
void GraphAdjacencyListWeight::GenerateMSCPPrime(int FirstVertex) {
int *visited = new int[VertexNumber];
memset(visited, , VertexNumber * sizeof(int));
//-1代表没用到
//0代表此点已放进容器
CLOSEEDGE *CloseEdge = new CLOSEEDGE[VertexNumber];
for (int lop = ; lop < VertexNumber; lop++) {
CloseEdge[lop].Weight = -;
CloseEdge[lop].StartVer = -;
} CloseEdge[FirstVertex].StartVer = ;
CloseEdge[FirstVertex].Weight = ;
//起点放进容器
visited[FirstVertex] = ; //将起点的邻接信息放入CloseEdge
for (auto tmpPtr = (VectorVertexList[FirstVertex])->firstArc; tmpPtr != nullptr; tmpPtr = tmpPtr->nextArc) {
CloseEdge[tmpPtr->AdjacencyNode].StartVer = FirstVertex;
CloseEdge[tmpPtr->AdjacencyNode].Weight = tmpPtr->weight;
} int k = -;
while (!IsAllVisited(visited)) {
k = SearchMinWeight(CloseEdge);
//输出生成的边
cout << "(" << CloseEdge[k].StartVer << " , " << VectorVertexList[k]->VertexIndex << ")" << endl;
visited[k] = ; UpdateCloseEdge(CloseEdge, k);
} //销毁
delete[]visited;
delete[]CloseEdge;
}
Prime
int GraphAdjacencyListWeight::SearchMinWeight(CLOSEEDGE closeedge[]) {
int miniWeight = -;
int index = -;
for (int lop = ; lop < VertexNumber; lop++) {
if ((miniWeight > closeedge[lop].Weight || miniWeight == -) && closeedge[lop].Weight > ) {
miniWeight = closeedge[lop].Weight;
index = lop;
}
}
if (index == -) {
//返回 -1 说明所有点都取了
return -;
}
return index;
}
void GraphAdjacencyListWeight::UpdateCloseEdge(CLOSEEDGE CE[], int k) {
//k点已被收录
CE[k].Weight = ;
CE[k].StartVer = ;
for (auto tmpPtr = VectorVertexList[k]->firstArc; tmpPtr != nullptr; tmpPtr = tmpPtr->nextArc) {
//已是最小生成树的成员,不进行比较
if (CE[tmpPtr->AdjacencyNode].Weight == ) {
continue;
}
if (CE[tmpPtr->AdjacencyNode].Weight >= tmpPtr->weight || CE[tmpPtr->AdjacencyNode].Weight == -) {
CE[tmpPtr->AdjacencyNode].StartVer = k;
CE[tmpPtr->AdjacencyNode].Weight = tmpPtr->weight;
}
}
}
Related Functions
运行结果:
参照书本的174页的那个图

Prime算法生成最小生成树的更多相关文章
- prime算法求最小生成树(畅通工程再续)
连着做了四道畅通工程的题,其实都是一个套路,转化为可以求最小生成树的形式求最小生成树即可 这道题需要注意: 1:因为满足路的长度在10到1000之间才能建路,所以不满足条件的路径长度可以初始化为无穷 ...
- kruskal算法生成最小生成树
kurskal算法更适合稀疏图 kruskal算法伪代码: int kruskal(){ 令最小生成树的边权之和为ans, 最小生成树的当前边数为Num_Edge; 将所有边按边权从小到大排序; fo ...
- POJ2395 最小生成树 - Prime算法
题目: Out of Hay Time Limit: 1000MS Memory Limit: 65536K Total Submissions: Accepted: Description The ...
- 最小生成树---Kruskal/Prime算法
1.Kruskal算法 图的存贮采用边集数组或邻接矩阵,权值相等的边在数组中排列次序可任意,边较多的不很实用,浪费时间,适合稀疏图. 方法:将图中边按其权值由小到大的次序顺序选取,若选边后不 ...
- 最小生成树(prime算法 & kruskal算法)和 最短路径算法(floyd算法 & dijkstra算法)
一.主要内容: 介绍图论中两大经典问题:最小生成树问题以及最短路径问题,以及给出解决每个问题的两种不同算法. 其中最小生成树问题可参考以下题目: 题目1012:畅通工程 http://ac.jobdu ...
- 最小生成树两个经典算法(Prime算法、Kruskal算法) - biaobiao88
经典的最小生成树例子,Prime算法,具体的步骤及其注释本人均在代码中附加,请仔细阅读与品味,要求,可以熟练的打出. //Prime算法基础 #include<iostream> usin ...
- 最小生成树之算法记录【prime算法+Kruskal算法】【模板】
首先说一下什么是树: 1.只含一个根节点 2.任意两个节点之间只能有一条或者没有线相连 3.任意两个节点之间都可以通过别的节点间接相连 4.除了根节点没一个节点都只有唯一的一个父节点 5.也有可能是空 ...
- hdu 1233(还是畅通project)(prime算法,克鲁斯卡尔算法)(并查集,最小生成树)
还是畅通project Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- Prime算法 与 Kruskal算法求最小生成树模板
算法原理参考链接 ==> UESTC算法讲堂——最小生成树 关于两种算法的复杂度分析 ==> http://blog.csdn.net/haskei/article/details/531 ...
随机推荐
- [BZOJ1045][HAOI2008]糖果传递(数学分析)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1045 分析:均分纸牌的环状版本. 先看线性的版本: 设f[i]表示第I位从第i+1位得 ...
- Spark之安装和使用
Scala安装 Spark使用Scala开发,安装的Scala版本必须和Spark使用的版本一致,否则使用Scala编写的Spark任务会有兼容性问题 可以到Spark官网查看确定Scala版本,或者 ...
- springboot启动mybatis
初期开发了generator可以根据表结果自动生产实体类.配置文件和dao层代码,可以减轻一部分开发量:后期也进行了大量的优化可以使用注解了,自动管理dao层和配置文件等,发展到最顶端就是今天要讲的这 ...
- 【CV论文阅读】Rank Pooling for Action Recognition
这是期刊论文的版本,不是会议论文的版本.看了论文之后,只能说,太TM聪明了.膜拜~~ 视频的表示方法有很多,一般是把它看作帧的序列.论文提出一种新的方法去表示视频,用ranking function的 ...
- golang中select case 的用途到底是啥
https://nanxiao.gitbooks.io/golang-101-hacks/content/posts/select-operation.html ------------------- ...
- InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
1,Mysqldump的时候报错例如以下: 2014-05-05 14:12:37 7f004a9a2700 InnoDB: Error: Table "mysql"." ...
- LeetCode 725. Split Linked List in Parts (分裂链表)
Given a (singly) linked list with head node root, write a function to split the linked list into k c ...
- HTTP的GET和POST请求
1.GET请求: 格式例如以下: request-line headers blank-line request-body 如图是我用wireshark截的一个GET请求的HTTP首部: GET请求发 ...
- JS高级技巧学习小结
安全类型检測 var isArray = value instanceof Array; 以上代码要返回true,value必须是一个数组,并且还必须与Array构造函数在同一个全局作用域中(Arra ...
- Codeforces Round #211 (Div. 2)B. Fence
B. Fence time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...