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

 //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. Nginx源码分析:3张图看懂启动及进程工作原理

    编者按:高可用架构分享及传播在架构领域具有典型意义的文章,本文由陈科在高可用架构群分享.转载请注明来自高可用架构公众号「ArchNotes」.   导读:很多工程师及架构师都希望了解及掌握高性能服务器 ...

  2. JSP计数器

    1.JSP弥补了servlet页面显示的不足:jsp运行时候需要转化为servlet,本质上就是servlet:tomcat下的work目录下有jsp的servlet和对应的class文件;下次再调用 ...

  3. ubuntu16.04 卸载 php7并安装php5.6记录

    ubuntu16.04版本从默认源安装的php版本为7.x版本,我们都知道php7.0已经舍弃了很多旧版本的函数等内容,这对旧系统来说是致命的,那么,我们就有了安装旧版php的需求,而同一主机安装两个 ...

  4. 【CV知识学习】Fisher Vector

    在论文<action recognition with improved trajectories>中看到fisher vector,所以学习一下.但网上很多的资料我觉得都写的不好,查了一 ...

  5. Android SwipeToDismiss:左滑/右滑删除ListView条目Item

     <Android SwipeToDismiss:左右滑动删除ListView条目Item> Android的SwipeToDismiss是github上一个第三方开源框架(githu ...

  6. Codeforces 196 D. The Next Good String

    D. The Next Good String time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  7. linux命令:find命令

    http://blog.csdn.net/pipisorry/article/details/39831419 linux find命令语法 find [起始文件夹] 寻找条件 操作 find PAT ...

  8. 20170623_oracle备份和恢复_常见问题

    1 为什么需要备份?备份分类? 1)故障.迁移.误操作 2)备份分类: 物理与逻辑角度:物理备份.逻辑备份 备份策略角度:完全备份.增量备份.差异备份 2 使用导入导出进行备份和恢复及其四种模式:其他 ...

  9. CodeForces - 556D

    D. Case of Fugitive time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  10. 【POJ 2259】 Team Queue

    [题目链接] http://poj.org/problem?id=2259 [算法] 由题,一个人入队时,若这个人所在的组已经有人在队列中,则加入队列,否则排到队末 因此我们发现,这个队列一定是由连续 ...