图论
文章平均质量分 59
大漠知秋
为了不显得懒,我还是写点东西吧
展开
-
最小生成树 - Kruskal
Kruskal 是一个简单、易于理解的算法,效率比 Prim 低,对要求不高的场景可以使用。以上的关键点在于要判断两点之间的边如果被选中了,是否会形成环?这里可以使用 在遍历的过程中把已经相连的点进行,而是否可以进行相连(选中这条边作为最小生成树的一员)就要看两点是否已经在一个并集上,如果在,则不能相连,因为会形成环,否则可以相连,并进行。测试show:......原创 2022-07-14 21:52:16 · 359 阅读 · 0 评论 -
最小生成树 - Prim
什么是最小生成树?假设有 个点,通过 条边将它们相连接,就叫做生成树,而最小就是这 条边的权重相加最小,综合起来就是最小生成树。下面一张图:按照最小生成树的规则,最终可以找到这样一条线:、、、、、、 7 条边把所有的点进行相连,形成了这张图的最小生成树。在这里也能看出来,想要找最小生成树,这个图必须是一个连通图,也就是没有其他的连通分量。那通过什么样的方式可以求得总共有哪些边可以组成最小生成树?要想解决这个问题,就需要先了解一下什么是。把一张图分成两部分就叫做切分,如下:把一张图分成两部分之后,连接原创 2022-07-07 08:26:57 · 1090 阅读 · 0 评论 -
有权图的读取
之前使用邻接矩阵实现的稠密图、无权图如下:在一个 n * n 的二维数组中表示两点相连即为 1(true),不连则为 0(false)。这在无权图中好使,但是如果是有权图,比如下:这中间已经不止存在着连接关系了,还有权值,这里的权值如:3.6、3.8、2.9、1.8。这些权值可能表示着距离、时间等等,在复杂点可能不是数字,而是一个对象,所以不能再像无权图那样简单的使用 0、1 表示。单独抽象出来一个 ,起名 ,属性包含了 、,权重使用模板,具体是什么类型让使用者决定。有权图的邻接矩阵在增加了 Edge原创 2022-07-07 08:25:31 · 314 阅读 · 0 评论 -
图的广度优先遍历
广度遍历可以求最短路径。原创 2022-07-07 08:24:05 · 143 阅读 · 0 评论 -
图的深度优先遍历
遍历一开始,第一个开始遍历的顶点是没有被遍历过的顶点,依次递归遍历当前顶点下第一个相邻顶点,只要是没有被遍历过的顶点,就一直递归下去,如果是已经递归过的顶点就跳过。深度遍历的特点是可以方便找到一张图的 。从一顶点开始,一直按照深度遍历的逻辑递归下去,等到递归完毕,如果图中还存在没有被遍历过的顶点,说明存在两个连通分量,若第二个递归完毕还有没有被遍历过的顶点,说明存在三个连通分量,以此类推。测试:顶点之间是否相连经过上边的步骤,知道了把一个顶点深度遍历完毕之后,就完成了一个连通分量的遍历,也就是说在一次原创 2022-07-07 08:22:33 · 672 阅读 · 0 评论 -
图的基本实现
稀疏图遍历邻边假设遍历 0 的邻边 1、4、7,如果是稠密图,就需要遍历整个 n 的长度,为 true 的是 0 的邻边。如果是稀疏图则可直接遍历,遍历出来的都是 0 的邻边。而大多数业务场景下,很少有一个顶点能连接其他所有顶点的情况,也就是使用稠密图的情况较少见,多数为使用稀疏图,稀疏图的遍历也更加有效率。稀疏图测试打印结果:可以看到,稠密图的邻边关系,天然按顺序排放,并且不会出现平行边。而稀疏图是随机排放,会出现平行边。准备好一个两个问题件 、 文件 ,如下:第一行第一个数字代表有多原创 2022-07-07 08:21:02 · 269 阅读 · 0 评论 -
图论基本概念
图是用来对 的成对关系建模的数学结构,由 或 以及连接这些顶点的 组成。值得注意的是,图的顶点集合不能为空,但边的集合可以为空,通俗的讲,一张图,没有点不行,没有边可以,大不了点与点之间不相连。图可能是无向的,这意味着图中的边在连接顶点时无需区分方向。否则,称图是有向的。下面左图是一个典型的无向图结构,右图则属于有向图,无向图也可以看成是一种特殊的有向图。连接顶点与顶点的边是否有数值与之对应,有的话就是有权图,否则就是无权图。在一个无向图 G 中,若从顶点 i 到顶点 j 有路径相连(当然从 j 到原创 2022-07-07 08:19:13 · 2180 阅读 · 0 评论