![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
文章平均质量分 59
数据结构图论有关算法及其c++语言实现
Zlun_Yan
这个作者很懒,什么都没留下…
展开
-
图论(十一)——多源最短路径之Floyd算法
算法思想如下:首先使用邻接矩阵建图,构建邻接矩阵DDD(邻接表反而会使得时间复杂度和空间复杂度变大,链式向前星反而无法处理这类问题,因为需要经常访问矩阵元素并更新)此外,还可以加上一个路径回溯矩阵RRR,RijR_{ij}Rij表示要从节点iii到节点jjj的路径为:从节点iii通过最短路径到达节点RijR_{ij}Rij再通过最短路径到达节点jjj然后“插入”节点,每“插入”一个节点,则更新矩阵DDD的值(min),若进行了更新,则修改路径回溯矩阵RRRint dir[node_num][原创 2021-08-02 10:34:52 · 168 阅读 · 0 评论 -
图论(一)——边的储存(邻接矩阵、邻接表、链式向前星)
对于图论而言,一共有三种存边的方式:邻接矩阵、邻接表、链式向前星邻接矩阵邻接矩阵即用二维数组储存int graph[Len][Len];graph[i][j] //这个表示的即是表示从节点i到节点j的边权值/*用一个二维数组存边,可以将数组的所有元素的值都初始化为某一个数k(要保证后面输入边权值时不会出现k),表示此时从i节点到j节点的边不存在*/优点:适合稠密图,...原创 2020-03-23 23:03:04 · 774 阅读 · 1 评论 -
图论(二)——拓扑排序
就一个题目来讲一讲拓扑排序:拓扑排序·一题目大意:有n门课,对这n门课一共有m个约束条件,约束原创 2020-05-07 15:52:56 · 173 阅读 · 0 评论 -
图论(三)——单源最短路径之Dijkstra算法
单源最短路径问题,即给定一张有向图(其实无向图也可以看作是有向图,即将无向的一条边看成是两条有向的边),设1号节点为起点,求其到i号节点的最短距离Dijkstra 算法Dijkstra 算法,算是这种单源最短路径问题中最为经典的一种算法了,其主要思想大致如下:设1号节点为起点,设一个长度为numNode的数组dis,其中dis[i]表示从起点1到节点i的最短距离,设一个长度为numNod...原创 2020-03-24 21:09:06 · 425 阅读 · 0 评论 -
图论(四)——单源最短路径之Bellman-Ford算法和SPFA算法
单源最短路径问题,即给定一张有向图(其实无向图也可以看作是有向图,即将无向的一条边看成是两条有向的边),设1号节点为起点,求其到i号节点的最短距离先来给出一个具体的题目,然后看看这两种算法是怎么写出代码来解决的【使用Dijkstra算法的解决方案:图论(二)——单源最短路径之Dijkstra算法】HDU最短路Bellman-Ford算法这个算法很好理解,它的操作的主要思想如下:...原创 2020-03-25 12:02:43 · 222 阅读 · 0 评论 -
图论(五)——最小生成树之Prim算法
最小生成树对于一张边带权的连通图 G = (V , E),由numNode-1条边和numNode个节点连通子图,且这个子图的边权值之和最小,则称这个子图为图G的最小生成树Prim算法该算法的思想简述如下:在图中取一点x,将其看作一个集合M,将其他的所有节点看作一个集合N遍历x的所有边,找到终点位于集合N中且权值最小的边,将这个终点y加入到集合M中遍历y的所有边,找到终点位于集合N...原创 2020-04-30 16:01:47 · 207 阅读 · 0 评论 -
图论(六)——最小生成树之Kruskal算法
最小生成树对于一张边带权的无向连通图 G = (V , E),由numEdge-1条边和numNode个节点无向连通子图,且这个子图的边权值之和最小,则称这个子图为图G的最小生成树Kruskal算法该算法的思想简述如下:建立并查集,每个点自己为一个集合将所有边(from , to , weight),按权值weight从小到大排序,依次扫描对于边(from , to , weigh...原创 2020-03-30 22:46:51 · 224 阅读 · 0 评论 -
图论(七)——网络流的最大流问题引入
网络流一个网络 G= (V , E) 是一张有向图,图中的每一条边 (x , y) ∈ E,其权值w的意义为 最多可以将w个物品从节点x运输到节点y,所以这个权值又称为边的 容量,记为c(x , y);此外,在图中没有标出的边,即 (x , y) ∉ E,则c(x , y) = 0然后还有两个指定的特殊的节点 S ∈ V,T ∈ V(S != T)分别...原创 2020-03-30 22:06:00 · 498 阅读 · 0 评论 -
图论(八)——网络流的最大流问题之Edmonds-Karp算法
增广路为了解决最大流问题,再引入一个概念:剩余容量【c(x , y)-f(x , y)】如果可以找到一条从源点出发,经过中间节点,流向汇点,且其中每一条边的剩余容量均大于0的路,就称这条路为一条增广路,假设可以知道这一条增广路中所有的边的最小剩余容量为p,那么对于整个网络系统而言,就可以增加一个流量为w的流从源点通过这一条路流向汇点,那么这个网络的流量就增加了w。如果找到了所有的增广路,已...原创 2020-03-30 22:04:37 · 1541 阅读 · 1 评论 -
图论(九)——网络流的最大流问题之Dinic算法
最大流图论(五)——网络流的最大流问题引入Dinic算法回顾EK算法【图论(六)——网络流的最大流问题之Edmonds-Karp算法】,发现EK算法在每次BFS搜索全图的过程中,只会得出一条增广路,这样的效率比较低,所以需要优化,优化之后的算法就叫做Dinic算法节点的层次:从起点S到节点i所需要经过的最少的边的数目如果用BFS在网络中得到节点层次的分层图,再用DFS搜索这个分层图(...原创 2020-04-07 21:54:16 · 222 阅读 · 0 评论 -
图论(十)——网络流的最大最小费用最大流问题
费用流在求网络的最大流的同时加上一个条件:每条边的流过流的单位费用,由此得出费用流的问题【其实费用流就可以算是最大流和最短路最长路的综合】费用流问题分为两类:最小费用最大流(最大流+最短路)最大费用最大流(最大流+最长路)最小费用最大流为什么说最小费用最大流就是最大流+最短路呢,可以这样想:有一条流量为f的增广路,对于其中的每一条边都有一个单位费用cost[i],每条边的流量都...原创 2020-04-08 16:34:49 · 1792 阅读 · 0 评论