![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
图论
文章平均质量分 67
图论
AcTarjan
冲冲冲!!!
展开
-
拓扑排序
拓扑序列 对一个有向无环图(Directed Acyclic Graph,简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前 AOV网(顶点活动网,Activity On Vertex network):顶点表示活动、边表示活动间先后关系的有向图。 Kahn算法 算法步骤 主要是循环执行以下两步,直到不存在入度为0的顶点为止。 (1) 选择一个入度为0的顶点并输出之; (2) 从网中删除此顶点及所有出原创 2020-06-12 15:08:06 · 143 阅读 · 0 评论 -
最小生成树
最小生成树 给定一个无向图,如果它任意两个顶点都联通并且是一棵树,那么我们就称之为生成树(Spanning Tree)。如果是带权值的无向图,那么权值之和最小的生成树,我们就称之为最小生成树(MST, Minimum Spanning Tree) Kruskal算法(贪心+并查集) 算法步骤 1、把所有的边按照权值先从小到大排列,开始时每个点构成一个集合 2、接着按照顺序选取每条边,如果这条边的两个端点不属于同一集合,那么就将它们合并,直到所有的点都属于同一个集合为止(可以使用并查集进行合并)原创 2020-06-11 21:26:08 · 213 阅读 · 0 评论 -
单源最短路径——Dijkstra算法
问题 求解一个点到图中所有点的最短距离,稠密图、不能含有负权 Dijkstra算法 基本思想 每次在未确定最小距离的点集中找距离源点src最近的点,然后以该点为中转点更新源点到其他点的距离 算法步骤 1、初始化minDis[i]=infy(很大的值),minDis[src]=0;使用isVisited[i]来表示minDis[i]是否已经确定 2、在未确定点集中寻找minDis[i]最小的结点u,将u加入到确定的点集中(即isVisited[u]=true) 3、更新所有以u为起点的边的终点原创 2020-06-11 16:45:34 · 345 阅读 · 0 评论 -
多源最短路径——Floyd算法
问题 求解图中任意两点的最短距离 算法思想 对于图中任意两点i到j的最短路径graph[i][j],要使路径变短,则必须引入第三个点k(称为中转点)来进行中转即i到k到j,有时候甚至需要进行更多的中转点才能使路径变的最短(其中含有动态规划的思想) 算法使用情况:稠密图,可以含有负权 图的存储:矩阵 时间复杂度:O(n^3) Java实现 void Floyd(){ for(int k = 1;k<=N;k++)//transmit point原创 2020-06-10 16:42:35 · 188 阅读 · 0 评论 -
树的最长路径
思路: 在遍历时,随便以一个结点为根节点,后续遍历即可。因为是多叉树,在求其到其它结点的最大深度时,要用两个变量first和second,表示该结点到其它结点的最大深度和次大深度。在以某个结点为根节点的树中,最远两个结点的距离为first+second 代码实现: #include <bits/stdc++.h> using namespace std; typedef lon...原创 2018-09-25 21:11:25 · 1385 阅读 · 0 评论