图论
strawberry zong
这个作者很懒,什么都没留下…
展开
-
最短路径——SPFA算法
SPFA算法 其实也是运用了动态规划的思想,借助于队列来实现求解最短路径。 其思想过程与Floyd算法有点相似,但是SPFA算法可以解决负权边的问题。 算法过程: 我们用数组dis记录每个结点的最短路径值(在目前步骤时),可以用邻接矩阵或邻接表来存储图G。 设立一个先进先出的队列q(C++的建议使用STL)用来保存待处理的结点,将源点放入。每次处理队列首元素u点,并且用u点当前的u点最短路径值对离...原创 2020-02-25 23:12:19 · 269 阅读 · 0 评论 -
图的遍历:DFS和BFS
DFS DFS即深度搜索,每次都沿着路径到不能再前进的时候才退回到最近的岔口。具体不再详细论述。 两个小概念: (1)连通分量: 在无向图中,如果有两个顶点可以相互到达(可以是通过一定的路径间接到达)那么就称这两个顶点连通。如果图中任意两个点都连通,则称图G为连通图;否则称它为非连通图,且称其中的极大连通子图为连通分量。 (2)强连通分量:在有向图中,如果两个顶点可以各自通过一条有向路径到达...原创 2020-02-25 16:04:05 · 124 阅读 · 0 评论 -
并查集原理,模板及优化
什么是并查集 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题,可以用来检查一个图中是否存在一个环。 算法原理 代码模板 #include<iostream> using namespace std; int parent[1010]; int n,m; void init(int n)//初始化 { for(int i=1;i&...原创 2020-02-21 23:32:33 · 99 阅读 · 0 评论 -
图论——最短路径 Floyd算法
Floyd算法是一个经典的动态规划算法。首先我们的目标是寻找从点i到到点j的最短路径。从动态规划的角度来看,我们需要为这个目标重新做一个诠释。 从任意节点i到任意节点j的最短路径不外乎两种可能:1.直接从i到j;2.从i经过若干个节点k到j。所以我们假设Dis(i,j)为节点为节点i到j的最短路径,对于每一个节点k,我们检查Did(i,k)+Dis(k,j)<Dis(i,j)是否成立,如果成...原创 2020-02-23 17:36:32 · 212 阅读 · 0 评论