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 ...
随机推荐
- Tomcat启动时SecureRandom超级慢的问题
https://my.oschina.net/wangnian/blog/687914
- 关于jQuery的append()和prepend()方法的小技巧
最近工作上有个需求是要求一个自动向上滚动的列表,表有很多行,但只显示一行,每次滚动一行.很简单的一个功能,代码如下 <div class="scroll-area"> ...
- DATASNAP压缩过滤器的使用
ZLIBCOMPRESSION FILTER 作为范例,我们使用已随D2010提供的DataSnap过滤器.可用于在客户端和服务端压缩数据流.这里说的ZlibCompression过滤器可以在DbxC ...
- 【转】gcov lcov 覆盖c/c++项目入门
原文: http://www.cnblogs.com/turtle-fly/archive/2013/01/09/2851474.html ------------------------------ ...
- [dfs] UVALive 3667 Ruler
题目链接: option=com_onlinejudge&Itemid=8&page=show_problem&problem=1668">https://ic ...
- LeetCode 7. Reverse Integer (倒转数字)
Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 Examp ...
- 第三章、Tiny4412 U-BOOT移植三 时钟设置【转】
本文转自:http://blog.csdn.net/eshing/article/details/37521789 这一章说明配置时钟频率基本原理 OK,接着说,这次先讲讲CPU的系统时钟.U-BOO ...
- [模板] BSGS
BSGS是一种解决一类专门的问题的解法,主要是解决已知A, B, C,求X使得A^x = B (mod p)这一类问题. 解法很简单,先设x = i*m-j(m=ceil(sqrt(p))),然后进行 ...
- unsigned 赋值负数输出情况 & printf输出格式
%d 有符号10进制整数 %ld 长整型 %hd短整型 %i 有符号10进制整数 %o 无符号8进制整数 %u 无符号10进制整数 %x 无符号的16进制数字,并以小写abcdef表示 %X 无符号的 ...
- js获取后台数据
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...