图论
文章平均质量分 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 · 158 阅读 · 0 评论 -
最小生成树
最小生成树给定一个无向图,如果它任意两个顶点都联通并且是一棵树,那么我们就称之为生成树(Spanning Tree)。如果是带权值的无向图,那么权值之和最小的生成树,我们就称之为最小生成树(MST, Minimum Spanning Tree)Kruskal算法(贪心+并查集)算法步骤1、把所有的边按照权值先从小到大排列,开始时每个点构成一个集合2、接着按照顺序选取每条边,如果这条边的两个端点不属于同一集合,那么就将它们合并,直到所有的点都属于同一个集合为止(可以使用并查集进行合并)原创 2020-06-11 21:26:08 · 224 阅读 · 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 · 356 阅读 · 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 · 196 阅读 · 0 评论 -
树的最长路径
思路:在遍历时,随便以一个结点为根节点,后续遍历即可。因为是多叉树,在求其到其它结点的最大深度时,要用两个变量first和second,表示该结点到其它结点的最大深度和次大深度。在以某个结点为根节点的树中,最远两个结点的距离为first+second代码实现:#include <bits/stdc++.h>using namespace std;typedef lon...原创 2018-09-25 21:11:25 · 1397 阅读 · 0 评论