虽说是生成树,但我只将生成的边输出了。至于怎么用这些边来创建树。。。我不知道_(:з」∠)_

 //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算法生成最小生成树的更多相关文章

  1. prime算法求最小生成树(畅通工程再续)

    连着做了四道畅通工程的题,其实都是一个套路,转化为可以求最小生成树的形式求最小生成树即可 这道题需要注意: 1:因为满足路的长度在10到1000之间才能建路,所以不满足条件的路径长度可以初始化为无穷 ...

  2. kruskal算法生成最小生成树

    kurskal算法更适合稀疏图 kruskal算法伪代码: int kruskal(){ 令最小生成树的边权之和为ans, 最小生成树的当前边数为Num_Edge; 将所有边按边权从小到大排序; fo ...

  3. POJ2395 最小生成树 - Prime算法

    题目: Out of Hay Time Limit: 1000MS Memory Limit: 65536K Total Submissions: Accepted: Description The ...

  4. 最小生成树---Kruskal/Prime算法

    1.Kruskal算法 图的存贮采用边集数组或邻接矩阵,权值相等的边在数组中排列次序可任意,边较多的不很实用,浪费时间,适合稀疏图.      方法:将图中边按其权值由小到大的次序顺序选取,若选边后不 ...

  5. 最小生成树(prime算法 & kruskal算法)和 最短路径算法(floyd算法 & dijkstra算法)

    一.主要内容: 介绍图论中两大经典问题:最小生成树问题以及最短路径问题,以及给出解决每个问题的两种不同算法. 其中最小生成树问题可参考以下题目: 题目1012:畅通工程 http://ac.jobdu ...

  6. 最小生成树两个经典算法(Prime算法、Kruskal算法) - biaobiao88

    经典的最小生成树例子,Prime算法,具体的步骤及其注释本人均在代码中附加,请仔细阅读与品味,要求,可以熟练的打出. //Prime算法基础 #include<iostream> usin ...

  7. 最小生成树之算法记录【prime算法+Kruskal算法】【模板】

    首先说一下什么是树: 1.只含一个根节点 2.任意两个节点之间只能有一条或者没有线相连 3.任意两个节点之间都可以通过别的节点间接相连 4.除了根节点没一个节点都只有唯一的一个父节点 5.也有可能是空 ...

  8. hdu 1233(还是畅通project)(prime算法,克鲁斯卡尔算法)(并查集,最小生成树)

    还是畅通project Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  9. Prime算法 与 Kruskal算法求最小生成树模板

    算法原理参考链接 ==> UESTC算法讲堂——最小生成树 关于两种算法的复杂度分析 ==> http://blog.csdn.net/haskei/article/details/531 ...

随机推荐

  1. Tomcat启动时SecureRandom超级慢的问题

    https://my.oschina.net/wangnian/blog/687914

  2. 关于jQuery的append()和prepend()方法的小技巧

    最近工作上有个需求是要求一个自动向上滚动的列表,表有很多行,但只显示一行,每次滚动一行.很简单的一个功能,代码如下 <div class="scroll-area"> ...

  3. DATASNAP压缩过滤器的使用

    ZLIBCOMPRESSION FILTER 作为范例,我们使用已随D2010提供的DataSnap过滤器.可用于在客户端和服务端压缩数据流.这里说的ZlibCompression过滤器可以在DbxC ...

  4. 【转】gcov lcov 覆盖c/c++项目入门

    原文: http://www.cnblogs.com/turtle-fly/archive/2013/01/09/2851474.html ------------------------------ ...

  5. [dfs] UVALive 3667 Ruler

    题目链接: option=com_onlinejudge&Itemid=8&page=show_problem&problem=1668">https://ic ...

  6. LeetCode 7. Reverse Integer (倒转数字)

    Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 Examp ...

  7. 第三章、Tiny4412 U-BOOT移植三 时钟设置【转】

    本文转自:http://blog.csdn.net/eshing/article/details/37521789 这一章说明配置时钟频率基本原理 OK,接着说,这次先讲讲CPU的系统时钟.U-BOO ...

  8. [模板] BSGS

    BSGS是一种解决一类专门的问题的解法,主要是解决已知A, B, C,求X使得A^x = B (mod p)这一类问题. 解法很简单,先设x = i*m-j(m=ceil(sqrt(p))),然后进行 ...

  9. unsigned 赋值负数输出情况 & printf输出格式

    %d 有符号10进制整数 %ld 长整型 %hd短整型 %i 有符号10进制整数 %o 无符号8进制整数 %u 无符号10进制整数 %x 无符号的16进制数字,并以小写abcdef表示 %X 无符号的 ...

  10. js获取后台数据

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...