
经典图论算法
AGI之心
szu-cs-zjf
展开
-
基于C++的Dijkstra最短路径算法
#include "stdafx.h"#include<cstdio>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<iostream>#include<functional>us原创 2018-07-11 10:13:16 · 4737 阅读 · 0 评论 -
二分图最大匹配-匈牙利算法
以下一些链接是大佬写的,写的很好,大家可以看看:https://blog.youkuaiyun.com/dark_scope/article/details/8880547https://blog.youkuaiyun.com/c20180630/article/details/70175814http://www.renfei.org/blog/bipartite-matching.html【code】...原创 2018-08-22 15:12:32 · 408 阅读 · 0 评论 -
网络流之最大流Ford-Fulkerson算法
最大流问题可以利用Ford-Fulkerson算法进行求解,其中Ford-Fulkerson算法求解步骤就是:构建出残余网络图,在残余网络图中寻找增广路径,利用增广路径中最小flow进行更新残余网络图,再寻找增广路径,以此往复,直到在残余网络图中找不到增广路径为止,这时候的totalflow就是整个网络图中的最大流。#include"stdafx.h"#include<cstdio&...原创 2018-08-22 14:01:16 · 1948 阅读 · 0 评论 -
递归求解拓扑全部序列
题目描述链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805343043829760在求解所有的拓扑序列时,发现这是一个递归的过程,所以可以用递归求解#include"stdafx.h"#include<cstdio>#include<algorithm>#include&l...原创 2018-08-06 11:20:50 · 2032 阅读 · 0 评论 -
关键路径求解
前言:首先关键路径是针对DAG图来说的,我们通常用AOE网来表示一个工程的进行过程,AOV网可以转换为AOE网,AOE网是没有环的,通常关键路径求解需要弄清楚以下四个概念:事件最早发生时间Ve[u]、事件最晚发生时间Vl[u]活动最早发生时间e[r]、活动最晚发生时间l[r]在AOE网(Activity On Edge,用带权的边表示活动,用顶点表示事件的有向图)中,【其实一个事件(顶点)仅表示一...原创 2018-07-15 10:29:01 · 3562 阅读 · 0 评论 -
拓扑排序判断是否为DAG图(有向无环图),并输出其中一种拓扑序列
DAG图:有向无环图拓扑排序:只有DAG图才能成功实现拓扑排序此算法将判断此图是否为DAG图,如果是DAG图,则输出其中一种拓扑序列代码如下:#include"stdafx.h"#include<cstdio>#include<vector>#include<iostream>#include<algorithm>#include<q...原创 2018-07-13 20:43:39 · 2681 阅读 · 0 评论 -
Kruskal最小生成树算法
Kruskal算法采用了边贪心的策略,同时运用了并查集的知识。其中为了实现kruskal算法,我们采用对边进行存储的图,对边进行从小到大排序、运用并查集等相关技巧,尽可能降低时间复杂度达到实现算法的目的。体会:在算法的设计过程中,我们采用哪种数据结构进行存储、借助哪种数据结构工具、如何实现的思想,都会导致不同的时间复杂度,因此,我们力求借助最合理的数据结构、借助以前的一些学过的算法知识和思想去设计...原创 2018-07-13 15:31:52 · 542 阅读 · 0 评论 -
最小生成树-Prim算法
最小生成树的3个性质:1、最小生成树是一棵树,其边数等于顶点数-1,且树内一定不会有环2、对给定的图G,其最小生成树可以不唯一,但其边权之和一定是最小的,唯一的3、最小生成树是在无向图中生成的,因此其根结点可以是这颗树上任意一个结点;因此,为了让最小生成树唯一,题目一般会给定一个根结点Prim算法和Dijkstra算法思想基本一样,只不过dis[]的数组含义不一样罢了代码如下:#include"s...原创 2018-07-13 11:31:26 · 543 阅读 · 0 评论 -
Floyd全源最短路径算法
时间复杂度:O(V的3次方)【V为顶点数】存储方法:本例采用的是邻接矩阵存储方法代码如下:void Floyd() { for (int i = 0; i < vertex; i++) { dis[i][i] = 0;//顶点i到i的距离初始化为0 } for (int k = 0; k < vertex; k++) { for (int u = 0; u < ve...原创 2018-07-13 09:47:28 · 873 阅读 · 0 评论 -
SPFA单源最短路径算法(利用队列优化过的Bellman-Ford算法)
Bellman-Ford算法时间复杂度达到了O(VE),那么可不可以对Bellman-Ford算法进行优化呢? 首先思考:Bellman-Ford算法很大一部分时间都用来做了无效功,其实,只有当dis[u]的值改变的时候,才可能使得以u为中介点到达v的dis[v]变短,从而进行松弛操作,那么一个办法就是:当dis[u]改变,则对以u出发能够到达的顶点V1、V2、V3,,,的这些边进行松弛操...原创 2018-07-13 08:06:27 · 297 阅读 · 0 评论 -
Bellman-Ford求解带有负权图的单源最短路径问题
本文参考了书目《算法笔记》 对于一个图如果存在零环、正环,利用Bellman-Ford算法不会影响到最短路径的求解;如果一个图出现了负环,则会导致恶性循环,会导致dis[u]出现负无穷,永远也求解不出来,但如果从源点出发,无法到达负环,则最短路径的求解不会收到影响(不在负环上的dis[u]可以求出确切值,在负环上的点v,标记dis[v]为不可达就行了) 下面是代码:#i...原创 2018-07-12 17:36:49 · 1572 阅读 · 0 评论