图论

图论总结

你。 提交于 2019-12-17 07:43:55
一、最短路   最短路常见算法包括堆优化Dijkstra、Bellman-Ford、SPFA、Floyd。   Dijkstra的时间复杂度为O(mlongn),但是但是不能处理负边权。   基于“松弛”操作(或称三角形不等式)的Bellman-Ford时间复杂度为O(nm),可以处理负边权。队列优化的Bellman-Ford,即SPFA,时间复杂度降到了O(km)(k通常为一个较小的常数),但是在特殊构造的图(比如网格图)中容易退化,因此有的大佬建议尽量不要在正式比赛中使用SPFA。   SPFA也可用于差分约束系统,将在第十部分讲解。   与前三种基于贪心的单源最短路不同,基于动态规划的Floyd是一种多源最短路算法,还可以用于求传递闭包等,但时间复杂度达到了O(n 3 ),无法处理较大的数据。   考场上一般不会考裸的最短路,次短路和最短路计数估计也不常考。我个人觉得真正可能作为考题出现的是最短路树,即由某一点出发的最短路上的边构成的树。众所周知,树拥有许多优秀的性质,也因此常常作为考点。放上几道题:   WOJ #3771 「一本通 3.1 例 1」黑暗城堡(比较裸的最短路树)   WOJ #2423 安全出行Safe Travel(USACO的题)    WOJ#4709 迷路 (某道校内模拟赛题)   最短路也可以与其它算法结合:   WOJ #3841 双调路径

图论--拓扑排序--模板

懵懂的女人 提交于 2019-12-11 05:23:02
//字典序号最小 # include <cstdio> # include <cstring> # define MAXN 517 int G [ MAXN ] [ MAXN ] ; //路径 int in_degree [ MAXN ] ; //入度 int ans [ MAXN ] ; int n , m , x , y ; int i , j ; bool toposort ( ) { for ( i = 1 ; i <= n ; i ++ ) //从最小的开始寻找, { //这样保证了有多个答案时序号小的先输出 int k = 1 ; while ( in_degree [ k ] != 0 && k <= n ) //寻找入度为零的点 k ++ ; if ( k == n + 1 ) return 0 ; ans [ i ] = k ; in_degree [ k ] = - 1 ; //更新为-1,后边检测不受影响,相当于删除节点 for ( int j = 1 ; j <= n ; j ++ ) { if ( G [ k ] [ j ] ) in_degree [ j ] -- ; //相关联的入度减1 } } return 1 ; } void init ( ) { memset ( in_degree , 0 , sizeof ( in_degree ) ) ;

Python语言开发的图论与复杂网络建模工具—networkx节点染色

╄→尐↘猪︶ㄣ 提交于 2019-12-10 11:33:55
一、介绍 networkx是一个用Python语言开发的图论与复杂网络建模工具。 networkx支持创建简单无向图、有向图和多重图;内置许多标准的图论算法,节点可为任意数据;支持任意的边值维度,功能丰富,简单易用。 数据段 下面是画图所用到的数据(items2.txt): name,num,goods 小明,1,橙子 小明,1,苹果 小明,1,番薯 小红,1,柚子 小红,1,苹果 小红,1,火龙果 1,1,番薯 1,1,香蕉 小花,1,苹果 小花,1,番薯 小花,1,香蕉 张三,1,橙子 张三,1,香蕉 代码段 其中颜色向量的顺序是节点的顺序(如:小明1、橙子2、苹果3、番薯4…) # coding = utf-8 import csv from pylab import * import networkx as nx def re_networkx ( ) : g = nx . Graph ( ) with open ( 'items2.txt' , 'r' , encoding = 'utf-8' ) as csvfile : # 调用csv中的DictReader函数直接获取数据为字典形式 reader = csv . DictReader ( csvfile ) # 创建一个counts计数一下 看自己一共添加了了多少条数据 for each in reader :

图论--拓扑排序--HDU-1285确定比赛名次

好久不见. 提交于 2019-12-10 11:25:09
Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。 Input 输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也有两个整数P1,P2表示即P1队赢了P2队。 Output 给出一个符合要求的排名。输出时队伍号之间有空格,最后一名后面没有空格。 其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍在前;输入数据保证是正确的,即输入数据确保一定能有一个符合要求的排名。 Sample Input 4 3 1 2 2 3 4 3 Sample Output 1 2 4 3 裸的字典序最小拓扑排序 # include <cstdio> # include <cstring> # define MAXN 517 int G [ MAXN ] [ MAXN ] ; //路径 int in_degree [ MAXN ] ; //入度 int ans [ MAXN ] ; int n , m , x , y ; int i

数据结构实验之图论四:迷宫探索oj

余生长醉 提交于 2019-12-08 04:28:48
数据结构实验之图论四:迷宫探索 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 有一个地下迷宫,它的通道都是直的,而通道所有交叉点(包括通道的端点)上都有一盏灯和一个开关;请问如何从某个起点开始在迷宫中点亮所有的灯并回到起点? Input 连续T组数据输入,每组数据第一行给出三个正整数,分别表示地下迷宫的结点数N(1 < N <= 1000)、边数M(M <= 3000)和起始结点编号S,随后M行对应M条边,每行给出一对正整数,表示一条边相关联的两个顶点的编号。 Output 若可以点亮所有结点的灯,则输出从S开始并以S结束的序列,序列中相邻的顶点一定有边,否则只输出部分点亮的灯的结点序列,最后输出0,表示此迷宫不是连通图。 访问顶点时约定以编号小的结点优先的次序访问,点亮所有可以点亮的灯后,以原路返回的方式回到起点。 Example Input 1 6 8 1 1 2 2 3 3 4 4 5 5 6 6 4 3 6 1 5 Example Output 1 2 3 4 5 6 5 4 3 2 1 Hint Author xam #include <stdio.h> int Map[3100][3100],v[3100]; int num,a[3100]; int n,m,c; void DFS(int x)

图论问题(2) : hdu 1102

白昼怎懂夜的黑 提交于 2019-12-06 23:19:27
题目转自hdu 1102, 题目传送门 题目大意: 输入一个n*n的邻接矩阵,其中i行j列代表从i到j的路径的长度 然后又m条路已经帮你修好了,求最短要修多长的路才能使所有村庄连接 不难看出,这道题就是标准的最小生成树模板,多水啊 虽然很水,但本人还是调了近1h才把代码调好...... 下面介绍一下解决最小生成树的两个方法: Prim 和 Kruskal 一,Prim (不懂的点这里) Prim的思想和dijkstra的想法很想 (如果不知道dijkstra算法的请点这里) 那么Prim的复杂度在为优化之前是O(n 2 ),还是很慢的 (虽然这道题能过) 既然这样,那这道题该怎么用Prim解呢? 思考了近10min后我想到了一个绝妙的方法 ,但是这里地方太小写不下 既然已经有建好了的,那我们肯定要用他已经建好的 所以,我们在输入时做一个预处理 将所有已经建过的路的距离化为0,然后再跑一遍Prim就行了 预处理代码如下: for(int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); g[x][y]=g[y][x]=0; } p.s.:g为邻接矩阵 然后在花15min打一遍Prim算法就可以愉快地AC了 AC代码如下: #include<iostream> #include<stdio.h> #include<algorithm>

图论问题(1) : hdu 1198

 ̄綄美尐妖づ 提交于 2019-12-06 15:18:27
题目转自hdu 1198, 题目传送门 题目大意: 给你11种单位水管摆放位置,若上下或左右有水管连接则视为这两点相连。 最后让你求这些张图中有几个连通块。 本来觉得这道题很简单,不就一个建图在并查集不就完了吗? (如果连并查集都不会, 请点此学习一下 ) 当然,并没有这么简单 (在T了十几次后终于明白) 然后,我们可以发现,每个单位只有4个方向。 很容易想到用二进制进行状态压缩 压缩代码如下: int change(char ch) { switch(ch) { case 'A':return 9; case 'B':return 12; case 'C':return 3; case 'D':return 6; case 'E':return 10; case 'F':return 5; case 'G':return 13; case 'H':return 11; case 'I':return 7; case 'J':return 14; case 'K':return 15; } } 然后写一个并查集模板就应该可以AC了 (本人没试过) 可能是因为T太多回了,所以产生了心理阴影 于是,本人 不厌其烦地 去写时间复杂度更低的算法 在思考了近10min后,我终于有点头绪了 提到二进制,我最先想到的就是位运算 我就想,这道题能不能用位运算优化呢? 实际上是可以的

石角由后图论平

烈酒焚心 提交于 2019-12-06 08:55:18
http://v.baidu.com/v?word=%B7%EF%CC%A8%C3%C3%D7%D3%C9%CF%C3%C5%C8%AB%CC%D7%B7%FE%CE%F1%CE%A2%D0%C5v%D0%C5rav4169%B7%FE%CE%F1%C9%CF%C3%C5 http://v.baidu.com/v?word=%B7%F6%D3%E0%D5%E6%CA%B5%C3%C3%D7%D3%D5%D2%B0%B4%C4%A6%BB%D5v%D0%C5rav4169%C1%AA%CF%B5%B7%BD%CA%BD%C8%AB%CC%D7%D5%E6%BA%C3 http://v.baidu.com/v?word=%B7%F0%C6%BA%C4%C4%C0%EF%C3%C3%D7%D3%D5%D2%B1%A3%BD%A1%BB%D5v%D0%C5rav4169%C1%AA%CF%B5%B7%BD%CA%BD%C8%AB%CC%D7%D5%E6%BA%C3 http://v.baidu.com/v?word=%B7%F6%B9%B5%C3%C3%D7%D3%C9%CF%C3%C5%C8%AB%CC%D7%B7%FE%CE%F1%CE%A2%D0%C5v%D0%C5rav4169%B7%FE%CE%F1%C9%CF%C3%C5 http://v.baidu.com/v?word=

前置内容1:算法与数据结构

我是研究僧i 提交于 2019-12-06 08:42:38
信息学竞赛的主要考点就是算法与数据结构。 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 简单来说,算法用于解决一个具体的问题,应该具有几个性质:确切性,有限性,输入输出,可行性。 也就是说,一个算法应该首先是确定的,而不是模棱两可的;其次是可以在有限的时间和步数内完成;另外需要有输入和输出(输入可以没有,但输出必然需要);所有的基本操作都是可以完成的。 属于OI范围的算法主要包括: 基本算法:包括枚举,模拟,贪心,二分,排序等。它们是其他算法或数据结构的基础; 搜索算法:包括深度优先搜索(DFS),广度优先搜索(BFS)及其优化。搜索是比较接近暴力的算法,但是又有很多优化型内容,例如迭代加深搜索(ID-DFS),A*算法等,在NOIP普及组和提高组中非常重要; 动态规划(DP):包括线性动态规划,多维动态规划,树形动态规划,状态压缩动态规划,图论动态规划等,还有一些拓展的类型,如期望DP,插头DP,数位DP,动态DP等。动态规划是较难的算法,无论是什么等级的比赛中动态规划都是极其重要的; 图论算法:包括最短路算法(SP),最小生成树(MST),拓扑排序,无向图的割边和割点,有向图的强连通分量(SCC),二分图匹配

lesson1-图的概念和图论模型

给你一囗甜甜゛ 提交于 2019-12-06 08:39:28
说明: 图论专题开设的目的主要是作为本学期复习巩固和分享自己对于图论的理解,主要参考的是老师的PPT。应老师要求,不能共享文件,抱歉! 参考书目: [1] J.A. Bondy, U.S.R. Murty, 吴望名等译《图论及其应用》, 1976 [2]Gary Chartrand《图论导引》,人民邮电出版社,2007 [3]Bela Bollobas,《现代图论》,科学出版社, 2001 [4]Douglas B.West《图论导引》, 机械工业出版社,2007 [5]Chris Godsil, Gordon Royle 《Algebraic Graph Theory》, 世界图书出版公司, 2004 [6] Norman Biggs,《Algebraic Graph Theory》 ,世界图书出版公司, 2014 [7] Robin J. Wilson,《图论导引》5th ed, 世界图书出版公司, 2015 [8] R. Diestel著, 于青林等译《图论》, 高等教育出版社, 2013 [9]王树华等著,《图论算法理论、实现及应用》,北京大学出版社, 2011 [10] R.L. Graham, D.E. Knuth, O. Patashnik, Concrete Mathematics(具体数学), 2nd ed, 机械工业出版社, 2002.8 一:图论应用目前的情况