图论
Sentry-X
山东大学计算机学院
展开
-
2021-03-02 洛谷P1726 受欢迎的奶牛——Tarjan算法的应用(三)
摘要:应用Tarjan算法求解缩点后新图的出度为零的点。(套图论的结论)问题简述:给定n个点,m条边,用Tarjan算法先缩点,之后求出其他强连通分量都可到达的的强联通分量包含的点的个数。 算法分析:1. Tarjan算法分析2. 如何求出其他强连通分量都可以到达的强连通分量步骤二应用图论的结论:1、 缩点后的图一定不是强联通图2 、如果非强连通有向图中存在两个以及两个以上的点出度为0,则不存在这样的点满足其他点到该点都有边3 、如果非强连通有向图中有且仅有一个点满足出度为0,则原创 2021-03-02 23:01:24 · 99 阅读 · 0 评论 -
2021-03-01 洛谷P2863缩点——Tarjan算法应用(二)
摘要:应用Tarjan算法求解强联通分支问题简述:给定n个点,m条边的有向图。每一个点都有一个权重w[i]w[i]w[i].请求出一条路径,使得路径经过的点的权重值和最大原题链接:洛谷P2863缩点 算法分析:在Tarjan算法求割点的基础上,使用栈(或者队列)保存每一个连通分支包含的点的编号。特别的一个联通分支以该连通分支最先遍历到的点为代表。代码以及详细注释:#include <iostream>#include <stdio.h>#include原创 2021-03-01 21:10:39 · 218 阅读 · 0 评论 -
2021-03-01 洛谷P3388割点的求法——Tarjan算法应用(一)
摘要:Tarjan算法可以用于求解图论中的割点问题以及强联通分支等问题。主要思想就是利用DFS搜索树,将图化为树。通过对基础的DFS搜索算法的改进,记录每一个点遍历的时间(时间戳),通过比较父节点和子节点遍历顺序的先后,判断时候属于同一个连通分支或者某点是否为割点。问题简述:给定n个点,m条边,图是无向图(强调一下,只有无向图才有割点,割点的定义就是去掉无向图中一点u,如果去掉后,图中的连通分支数增多,则说明u是割点原题链接:洛谷P3388割点(模板)算法分析:该算法的本质思想就是1.原创 2021-03-01 20:58:13 · 157 阅读 · 0 评论 -
2021-02-26 洛谷P1996Floyd算法求解最长路
摘要:提示:这里简述项目相关背景:例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大)问题描述:提示:这里描述项目中遇到的问题:例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据APP 中接收数据代码:@Override public void run() { bytes = mmInStream.read(buffer); mHandler.obtain原创 2021-03-01 08:03:45 · 283 阅读 · 0 评论 -
2021-02-26洛谷P1536并查集模板
摘要:并查集模板——路径压缩,按秩分配问题简述(问题转化):有n个村庄,给出m个条件,每一个条件表示两个村庄之间相互连通。问给定的两个村庄之间是否可达(不一定是直接可达)原题链接:洛谷P1536村村通算法分析:典型的并查集模板。可以使用路径压缩和按秩分配进行优化。特别强调,本道题目中的输出不容易控制,可以采用表达式(cin>>n>>m)的返回值进行判断。使用cin进行输入,如果输入后缓冲区中没有其他东西(字符,整数等)责会返回EOF,EOF在while中被认为是f原创 2021-02-26 17:18:31 · 126 阅读 · 0 评论 -
2021-02-26 洛谷P1966挖地雷——dfs暴力搜索(回溯法)
摘要:dfs暴力搜索。以图中任意一个定点i为起点开始搜索,通过dfs搜索每一条路径,找出权重最大的一条。题目简述(问题转化):n个点,有向加权图,给出邻接矩阵。求一条最大权重的路径洛谷P1966算法分析:由于点数n很小,因此可以采用dfs暴力搜索的方法。分析题目可知,每到一个点,都可以挖到一定数量的地雷,可将这个条件转化为上一个点到下一个点之间的边的权重大小。这道题和简单的图论中的深度搜索不一样。这里面的每一个点可以遍历任意多次,因此不可以简单的用一个visit数组,将之前遍历过的点全原创 2021-02-26 09:19:43 · 156 阅读 · 0 评论 -
2021-02-25最小生成树模板——prime算法
摘要:最小生成树模板——prime算法最小生成树模板——krusal算法题目简述:洛谷P3366最小生成树模板 算法分析: prime算法和迪杰斯特拉算法有异曲同工之处,二者的本质都是贪心和动态规划。prime算法的思想可以概括为“逐步短接”,每一次选取当前遍历到的定点的最短的一条临边。根据上述分析可知,由于每一次都会选取一条最短的边,因此可借鉴迪杰斯特拉算法的实现过程,采用隐式数据结构——堆,进行优化。详见代码代码以及详细注释:#include <iostream>原创 2021-02-25 07:56:29 · 252 阅读 · 0 评论 -
2021-02-25 最小生成树模板——krusal算法
摘要:最小生成树算法模板——krusal算法题目简述:洛谷P3366最小生成树模板算法分析:krusal算法的主要利用了贪心的思想,现将所有边按照权重排序,之后每一次添加一条权值最小的边。由于初始时将图简化为只含有n个点的平凡图,因此新加入的边满足加入后不产生环路。初始时n个点,每一次加入一条边都会将两个点相连接,这个特性正好满足并查集的特点。因此,krusal的代码实现可以采用并查集算法。代码以及详细注释:#include <iostream>#include &l原创 2021-02-25 07:46:10 · 630 阅读 · 0 评论 -
2021-02-18洛谷P807最长路——spfa模板
摘要:spfa模板以及对比spfa和dijskral的区别问题描述:例题见洛谷P1807最长路 算法分析:spfa主要用于单源点最短路径的求解,相比于dijskral算法,spfa可以求解含有负权边,且不含负环的图。但是在效率上比不上的迪杰斯特拉算法代码以及详细注释:#include <iostream>#include <vector>#include <string>#include <set>#include <al原创 2021-02-23 10:26:37 · 364 阅读 · 0 评论 -
2021-02-21 洛谷P1119 Floyd算法变式——灾后重建
摘要:Floyd算法的应用——对于Floyd算法本质的考察问题描述:有0至n-1共n个村庄,每一个村庄都需要一定的时间重建,在重建完之前不得通车。求解给定时刻下,点i到点j的最短距离原题连接洛谷P1119 灾后重建 算法分析:提示:题目中给出的数据都是已经排好序的,包括村庄的编号按照需要重建的时间升序排序,问题中时间也是升序排序。这为阶梯提供了一个良好的思路。Floyd算法的本质是利用动态规划的思想,通过其他的点进行中转来求的两点之间的最短路,因为我们知道,两点之间有多条路,如果换一条路原创 2021-02-21 23:38:39 · 170 阅读 · 0 评论 -
2020-02-20 洛谷刷题P1144—— 最短路计数问题
摘要:最短路计数问题问题描述:题目连接洛谷P1144最短路计数 算法分析:本题实际上是一道简单的最短路求解的模板题。在迪杰斯特拉算法或者spfa算法模板的基础上加上负责计数的数组count即可。值得注意的是本题目是无向不加权图,因此也可以使用BFS求解。代码以及详细注释:#include <iostream>#include <vector>#include <queue>#define INF 10000000using namespa原创 2021-02-20 22:34:01 · 135 阅读 · 0 评论 -
2021-02-20 洛谷P1629 Floyd算法模板
摘要:Floyd算法模板问题描述:原题详见洛谷P1629邮递员送信 算法分析:相比于经典的迪杰斯特拉算法和spfa算法,Floyd算法更适合求解多源点最短路径,即n个点之间的最短路径分别是多少。FLoyd算法和运行n次dijskral算法的时间复杂度都是O(n3)O(n^3)O(n3) ,但是Floyd算法可以处理含有负权边的图,且实验证明Floyd算法更快代码以及详细注释://洛谷P1629题解,#include <iostream>#include <vect原创 2021-02-20 16:07:23 · 381 阅读 · 0 评论 -
2021-02-19 最短路径(反向建图洛谷P1629)
摘要:单源点最短路径的应用问题简述:求一点到其他点的最短路径以及其他点到某一点的最短路径的大小(特点是需要反向建图)题目原链接:洛谷P1629 算法分析:根据题目要求可知,首先需要求起点到其他点的最短路径,因此采用单源点最短路径的算法dijskral算法。又因为所有路径为单向路径,因此 往返路径的长度不一样。为了求解2至n-1号点到点1的距离,可以采用反向建图的方法。代码以及详细注释:#define _CRT_SECURE_NO_WARNINGS#include <ios原创 2021-02-19 14:37:23 · 231 阅读 · 0 评论 -
2020-02-18 spfa,dijskral,Floyd三种算法求解最短路径原理详解和代码实现
转载:spfa,dijskral,Floyd三种算法求解最短路径原理详解和代码实现转载 2021-02-18 10:13:38 · 113 阅读 · 0 评论 -
2021-02-18 洛谷P4779 dijslral算法模板
摘要:关于迪杰斯特拉算法的堆优化版本问题描述:详见题目:洛谷P4779算法描述: dijskral算法的本质应用了贪心策略和动态规划思想。其原理可以概括为:新生成的最短路径都是有已经产生的最短路径中加一条边产生的。初始时起点s到起点s的距离就是0,每一次加入的边都是从图的边集中选取某点的临边加入。在具体实现时,每一次选取一条距离起点s最短的点u,则u到s的距离为此次选取出的一条最短路径。选出当前距离s最短的点u后,考虑u的邻接点,即考虑新产生的最短路径(的点)能否更新未产生最短的路径的原创 2021-02-18 09:44:11 · 127 阅读 · 0 评论