图论入门小结

1.传递闭包

和弗洛伊德一样的三个循环...不过从三角形松弛变成了判断两个点是否都有一条到某一个中间节点的路径,若有则两点联通. 复杂度n^3

2.弗洛伊德 任意两点间最短路

三角形性质 dis[x]+len[x][y]>=dis[y];//某一点到x的距离+x与y之间的距离>=该点到y的距离

松弛就是把不满足上述要求的最短距离改为满足的...

复杂度n^3

三个循环,中间节点放最外面

1 for(){// k的循环
2     for(){// i的循环
3         for(){// j的循环
4             if(dis[i][k]+dis[k][j]>=dis[i][j]){
5                 dis[i][j]=dis[i][k]+dis[k][j];
6             }
7         }
8     }
9 }

初始化:

没有相连的边则权值为正无穷,用memset全部初始化为10即可;

自己到自己的距离为0;

163博客真的对强迫症太不友好了QAQ手动缩进浑身难受.

3.迪杰斯特拉 单源最短路 可用堆优化虽然还不会但是还是要大写加粗

邻接表和矩阵都可以用

要求不能有负权

1.找距离所求点最短距离的点;

2.然后以该点为中间点对其他所有未访问的点做松弛同时对该点做访问过的标记;

3.如果能找到没有访问过的点,返回1,否则结束;

复杂度n^2.

 1 void work(int st){
 2     for(int i=1;i<=n;i++){
 3         dis[i]=maps[st][i];
 4     }
 5     memset(vis,0,sizeof(vis));
 6     vis[st]=1;
 7     dis[st]=0;
 8     for(int i=1;i<=n;i++){
 9         int minn=99999999;
10         int k=0;
11         for(int j=1;j<=n;j++){
12             if(dis[j]<=minn&&(!vis[j])){
13                 minn=dis[j];
14                 k=j;
15             }
16         }
17         if(k==0){
18             return;
19         }
20         vis[k]=1;
21         for(int j=1;j<=n;j++){
22             if((maps[k][j]+dis[k]<=dis[j])&&(!vis[j])){
23                 dis[j]=dis[k]+maps[st][j];
24             }
25         }
26     }
27 }

4.Bellman_ford算法  判断是否有负环

5.SPFA 改进上面的

4用边表

5用邻接表+队列

p196自己翻书好了.....

6.最小生成树

p200

时间: 2024-10-08 17:25:22

图论入门小结的相关文章

线段树入门小结

QUE:线段树? 称谓: 从刘汝佳的书中得知,"这种数据结构在学术界没有统一的术语,但线段树是最常见的叫法.其他叫法包括区间树(interval tree).范围树(range tree)等,但这些属于在特定的场合(如计算几何)中有着特殊的意义".怎么叫看读者的心情,以下统一用线段树称呼. 先来作一些了解: 线段树是一棵二叉树,它的左右儿子也都是一棵线段树.(定义) 线段树也叫区间树,为什么叫它区间树呢?因为线段树是一种基于区间的数据结构. 线段树的每个节点代表一个区间 [L,R],其

&lt;图论入门&gt;邻接矩阵+邻接表

非本人允许请勿转载. 趁热打铁,学会了邻接表把这个总结一下,以及感谢大佬uncle-lu!!!(奶一波)祝早日进队! 首先,图论入门就得是非常基础的东西,先考虑怎么把这个图读进去. 给定一个无向图,如下 怎么把这个图的数据读入进去呢? 把这个图剖析开来看,1连着的是2和3,2连着4和5,3连着6和7,4连着5,5连着8和6,6连着9. 所以这个图可以用一种神奇的东西----邻接矩阵来存.如下,能联通的制为1,不能联通的制为0. 那么可以看出来,这个邻接矩阵光读入的时间复杂度就是O(N2)的了,在

mybatis入门小结(六)

入门小结---查询 1.1.1.1.1 #{}和${} #{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入. #{}可以接收简单类型值或pojo属性值. 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称. ${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型

Tomcat和Servlet入门小结

Tomcat和Servlet入门小结 Tomcat入门 启动: 进入bin目录,双击startup.bat,运行该文件 访问浏览器,输入:http://localhost:8080 访问自己: ? 输入:http://别人的ip:8080 访问别人(8080为Tomcat的端口号) 启动时可能遇到的问题: 黑窗口一闪而过: *原因:没有正确配置JAVA_HOME变量: 启动报错: *暴力解决:在cmd中输入netstat -ano找到占用端口号的对应进程并杀死 *在Tomcat的config\s

ACM 图论入门

①图论基础 图由点和边组成 记顶点集合为V 边集合为E的图为G=(V,E) 图可分为有向图和无向图.如表示朋友关系的图为无向图,表示点之间大小关系的图为有向图. 边也可以带有权值,带有权值称为有权图,不带有权值称为 无权图. 一.关于无向图 任意两点之间都有路径的图叫做连通图,顶点连接的边数称为这个点的度. 没有环的连通图就是树,没有环的非连通图就是森林. 一棵树的边数=顶点数-1.反之 边数=顶点数-1的连通图就是树. 二.关于有向图 以一个点为起点的边数称作这个点的出度,以一个点为终点的边数

docker入门小结

入职需要学习docker,记录学习随笔.争取两天大致看完docker学习.博客也算是迁移到cnblogs. 学习的链接参考<docker从入门到实践>http://dockerpool.com/static/books/docker_practice/index.html 源码参考https://github.com/tingfengainiaini/docker_practice,已经fork到我自己的github 另外参考许小圣博客http://www.cnblogs.com/openxx

JavaWeb基础—MySQL入门小结

一.数据库概述 RDBMS:关系型数据库管理系统 == 管理员(manager)+仓库(database) 常见数据库:  Oracal(神喻):甲骨文 MySQL: 归于甲骨文旗下(高版本系统已经开始收费) DB2: IBM旗下 SQL Server:微软旗下 二.MySQL安装与卸载 安装MySQL:(安装目录不能有空格或者中文) 选择几个next后选择custom(自定义),一般安装路径不用自己折腾,就把前面C盘的盘符改成D F等就OK 安装完后进行配置MySQL(精细配置),没有自动弹出

博弈论入门小结

感受到了被博弈论支配的恐惧-- 入门的话个人按顺序推荐几篇论文: <由感性认识到理性认识--透析一类搏弈游戏的解答过程>张一飞 <解析一类组合游戏>  王晓珂 <组合游戏概述-浅谈SG游戏的若干拓展及变形> 贾志豪 看完这三篇还是要有点时间的,然而博主很傻的倒着看完了,然后就成功地完成了入门到放弃,事倍功半-- 到现在为止博弈论做了7道题,感觉只是大致学了一点皮毛,以后肯定回去再做一些题目,然而Hz书店没有和博弈论有关的书,差评. 只能说博弈论是一个很奇妙的东西,并没有

正则表达式入门小结

正则表达式语言由俩种基本字符组成:元字符和普通字符. 元字符,即特殊符号,并不代表本身的字符意义,根据其在正则表达式语言中代表的特殊含义来匹配目标字符. 普通字符,即代表本身的字符意义,如1-9,a-z等. 1.基础且常用的特殊字符小结   代表匹配次数的元字符 {n} 重复n次 {n,m} 重复n到m次 a? 字符 a <=1次,相当于a{0,1} a+ 字符a >=1次,相当于a{1,} a* 字符a >=0次,相当于a{0,} ( ) 匹配目标值的分组,每个组自动有组号,从左到右组