上篇博客我们聊了图的物理存储结构邻接矩阵和邻接链表,然后在此基础上给出了图的深度优先搜索和广度优先搜索。本篇博客就在上一篇博客的基础上进行延伸,也是关于图的。今天博客中主要介绍两种算法,都是关于最小生成树的,一种是Prim算法,另一个是Kruskal算法。这两种算法是很经典的,也是图中比较重要的算法 ...
分类:
编程语言 时间:
2016-10-28 09:42:36
阅读次数:
366
1638 修复公路 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 1638 修复公路 1638 修复公路 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 时间限制: 1 s 空间限制: 256000 KB 题目等 ...
分类:
编程语言 时间:
2016-10-27 23:24:14
阅读次数:
215
带权图的最小生成树——Prim算法和Kruskal算法 带权图的最短路径算法——Dijkstra算法 ...
分类:
编程语言 时间:
2016-10-13 23:56:03
阅读次数:
436
有关概念: 最小生成树:在连通图G中,连接图G所有顶点且总权最小的边构成的树 思路: 首先对边按权从小到大排序,紧接着枚举每一条边,如果两个结点的祖先结点不同(并查集),则连上此边,直到边数等于结点数-1即可 邻接矩阵输入,用类邻接表存储方式存边 1 #include<cstdio> 2 #incl ...
分类:
编程语言 时间:
2016-10-12 16:57:14
阅读次数:
173
题目链接 http://vjudge.net/problem/POJ-1861 解题思路 用Kruskal算法可以比较轻松地得到每次连接的边 但是我用了1000ms过的。。。(时限1000ms(⊙﹏⊙)b)可能是我写挫了吧 代码 ...
分类:
Web程序 时间:
2016-10-10 23:38:10
阅读次数:
211
算法要点:Kruskal算法的最难点在于怎样判断加入边(x,y)后是否形成了环。 问题可化为:判断边(x,y)的两个顶点x,y在图(实际是森林)mst中最否已经连通。如果已经连通,加入边将形成环;否则,不形成环。 在kruskal算法中,要用到并查集的合并和查找 并查集: kruskal算法核心: ...
分类:
编程语言 时间:
2016-10-06 22:05:38
阅读次数:
420
晚上做携程的笔试题,附加题考到了权重最小生成树。OMG,就在开考之前,我还又看过一遍这内容,可因为时间太紧,也从来没有写过代码,就GG了。又吃了眼高手低的亏。这不,就好好总结一下,亡羊补牢。 权重最小生成树问题是指在一棵无向全连接图中找到一个无环子集T,既能将所有的结点连接起来,又具有最小的权重和。 ...
分类:
编程语言 时间:
2016-09-17 23:32:29
阅读次数:
194
/**并查集实现克鲁斯卡尔算法61 2 62 4 11 4 21 3 13 5 44 5 3**/#include<iostream>#include<vector>#include<algorithm>#define MAX_N 100using namespace std; struct Nod ...
分类:
编程语言 时间:
2016-09-10 23:55:11
阅读次数:
162
首先将每个平原缩成一个点,建出图,相邻两个点之间的边权为它们高度的较小值。 用Kruskal算法求出这个图的最大生成树,每次合并两个连通块时新建一个点指向它们,得到一棵有根树。 对于每个点,求出它子树内最高的峰,那么对于每个叶子,在它到根的路径上二分查找即可。 时间复杂度$O(nm\log(nm)) ...
分类:
其他好文 时间:
2016-09-07 19:04:07
阅读次数:
204