无向图的深度优先遍历非递归_图算法总结

@[TOC]

图算法

1、图的表示

1.1、邻接矩阵(有向图、无向图、带权图、代码实现)

1、无向图的邻接矩阵

7e142e44eedfedc9136e19e72e05b790.png

2、有向图的邻接矩阵

f490216039af6cf467e61831c90306cf.png

3、带权值的图

a4eb718e116903a5e40e0b6a794ef278.png

有了上述的理解,我们可以设计数据结构,并实现了。C++实现如下:

#include

db5e09521dec3a219677a6ad04ef9531.png

974eb9b4901896e70a470833fc670c49.png

1.2、 邻接表

1、邻接表的提出

0fe5269b9fcd4cafba2330b6721f7ab8.png

2、无向图的邻接表

3e4ea87077694251056821b4c941c1a3.png

16da7687f51b8ccbc1e822820e54bc22.png

3、有向图的邻接表(分出边表、入边表)

ef3895f55004e5d5d9a8697e588db8f2.png

4、带权图的处理

ac7a1d5fa78a3d40c72cdd0f61c30b7a.png

有了上面的邻接表的理解,我们可以实现代码(java):

package 

febe9e1c3a7fc2212b510a39f245ac14.png

7825837187b15aab8ddf51509181189c.png

c5d7b22b12752927caa80407b19afcdc.png

1.3、 十字链表与邻接多重表

1、十字链表——解决有向图邻接表结构缺点

e3714e097ed4cb54dc463088d742f559.png

8aaddb95e0ca869993bbef903903ae6e.png

2、邻接多重表——解决无向图邻接表结构,边的删除麻烦问题

45dd8b685264a7ad1fa9742ef89264db.png

f232f7850d05e4abb616d245a5e78963.png

70e4580fcc5e41145da13f773b114cee.png

1.4、边集数组

148c7334031d91f8435e0fcd8ded4616.png

2、图的遍历

2.1、DFS(深度优先搜索、递归算法)

a179aedc45a9ee2b8788624ce5f7a175.png

b2ba31862ebd13c61179878cbfc000c0.png

基于邻接矩阵的DFS

template

由于是邻接矩阵存储结构,算法时间复杂度O(n^2^)

基于邻接表的DFS

template

邻接表使得算法复杂度为O(n+e),n为顶点个数,e为边数。

2.2、BFS(宽度优先搜索、优先队列)

bba83fb416462c075738ba954ecfa2f7.png

bc407814c370dc3a00630514ba31ab4c.png

对边搜索、不断延展。 邻接矩阵的BFS

void 

邻接表的BFS

void 

2.3、小结

24c0b889613d2e1dd52d390ccc417d30.png

3、寻找最小生成树(两个贪心算法)

实际问题:

e97017e730ff9030a7e8dfc7d39b8117.png

27333181bc77719dfc76793ee31ea664.png

ff878276404b5a307a0356eda6d12961.png

3.1、Prim算法(分割法、贪心策略:寻找集合中的顶点所连接边中最小权值边)

4cbdb737f4d1677649d9dbfeea417b43.png

贪心策略、算法分析

23934ebb6042f31f06cc91551f7b0613.png
template

6d7cf938281bc0e21990a38ca95cf7e7.png

3.2、 Kruskal算法(边集数组、每次从剩余边选择最小权值边)

f335e633758bf81f5b3bd893a916657d.png

图解分析:

7e6177cdf45ac9c80bc2630c834634ad.png

基于分析我们可以写出代码:

template

运行结果:

8efb4b7c88b764571152ed0c2d2f0e65.png

4、最短路径问题

2734933235a76177091cfb12c5523336.png

5820ab70dc0188dd166bea7f9dcb86c2.png

66ff1a7c90369a1d38b80fb2504c5528.png

4.1、单源最短路径问题(给定一个点,求到其余各个点的距离)

4.1.1、迪杰特斯拉(Dijkstra)算法(贪心算法)

很像prim算法,利用集合,寻找最短路径。但是有区别。而且用途也不同。这是一个贪心算法。

b03e51ed5f4ecc4ca3fdaaca3d229004.png

基于理解上的算法实现 :

template

ec148a5a3f54fa01fed596ea3a2ad2b5.png

未优化的算法复杂度很高

f7c9ec147c2d279d2c5fa050c7dc218b.png

4.1.2、Floyd算法(动态规划)

b5938abffe030f992bdf07ae1c1e6f76.png

6dbaf2b92e36f9ac8c35a868ab0e643b.png

4.1.3、Bellman-Ford 算法

1dda5a65e6738d20aee42265802a6271.png

bf5d0b3c88f4a8cda6dc0c7afd805a66.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为ipd项目管理流程_IPD:一套卓越的产品开发经营体系

IPD全流程指的不仅仅是“产品开发流程”,而是如何实现产品“从机会到商业变现”的全流程。华为通过20年的全流程实践,才做到持续性推出高质量产品和解决方案。本期IPD全流程班,帮助企业研发管理者学习这套结构化流程,其中划下重点…

brew 安装mysql5.6_MacOS 10.14安装和brew更新后无法安装mysql gem

在macOS 10.14安装Brew更新后,我的开发系统坏了.我无法安装mysql gem.在尝试安装时,我得到:$gem install mysql -v 2.8.1 --source http://rubygems.org/Building native extensions. This could take a while...ERROR: Error installing mysql:ERROR: Failed to bu…

Springboot中@ComponentScan 注解

三个点: 1、工程中Application类的位置。默认情况下就不需要配置ComponentScan这个注解了。 因为Application类,在启动的时候,默认是加载和Application类所在同一个目录下的所有类,包括所有子目录下的类。所以一般情况下&#xff…

在react里写原生js_小程序原生开发与第三方框架选择

最近正在更新《微信小程序入门与实践》一书的第二版。书中有一章节谈到了”多样化的小程序开发“,摘取并加以整理分享给各位开发者。我一向不推荐也不提倡公众号阅读学习编程,文章更多的是列出小程序如今多样化的框架选择,并简单剖析它们之间…

springboot中service层注入的是实现类,但Controller层接收的是接口

我们习惯这样编写代码: 在service层写接口,然后用实现类去实现接口,并且将实现类注入到容器中 Service public class AccountServiceImpl implements AccountService {}在controller层却是用接口操作service的bean的方法, Auto…

mysql data transfer_MySQL主从同步加速 Transfer-- FAQ

Q: Transfer是什么A: 是一个解决MySQL原生主从同步延迟的方案。 Transfer本身是一个在MySQL源码上打的patch,可以用于当Slave,也可以用于当第三方工具,将Master的数据同步发给Slave。 利用多线程实现主从无延迟。Q: Transfer目前的发布形式&a…

springboot整合mybatisplus中@Mapper与@MapperScan的使用

一、Mapper与MapperScan不可同时使用 二、Mapper用于注解单个mapper接口 三、Mapper Scan用于批量注解Mapper接口 四、Mapper不起作用时,因为缺少下图中的依赖包 以上为自己整合框架中遇到的问题与解决方案,如果以上解决方案不能解决您的问题&#x…

html列表按时间排序代码_按字母顺序排序的列表

有时候你需要自制一份课件PPT或者手写笔记的关键词索引,用来开卷考试查阅PPT或者复习查阅笔记时能快速定位查阅内容位置,这时你可能想要一个按字母顺序排序的列表来帮助构建需要的索引。LaTeX自身的index本身并不支持这样的功能,修改起来也颇…

@MapperScan和@ComponentScan使用问题

报错如下 原因:当MapperScan和ComponentScan一起使用时,项目启动时扫描包会发生冲突,找不到swagger配置类的包和mapper接口的包 解决办法:MapperScan和ComponentScan可以一起使用。 改为MapperScan(basePackages {}…

C语言中CY位什么时候才能为1_你真的了解C语言中的整型吗?

整型数据类型1. 整型数据类型在上一节当中,我们遇到了整型(integer)int,用来表示一个整数的数据类型。下面呢我们来讨论一下C语言里面的整数数据类型。看到这里你可能想问,一个整数而已,为什么会需要定义这么多的类型出来呢?要知…

python2中xrange比range优点_【Python面试】 说说Python中xrange和range的区别?

公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!小猿会从最基…

Spring的两种动态代理:Jdk和Cglib 的区别和实现

Spring的两种动态代理:Jdk和Cglib 的区别和实现 一、原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。 而cglib动态代理是利用asm开源包,对代理对象类的class文件…

python语言程序设计难不难_零基础学Python编程开发难度大吗?从哪学起?

转行零基础学Python编程开发难度大吗?从哪学起? 近期很多小伙伴问我,如果自己转行学习Python,完全0基础能否学会呢?Python的难度到底有多大? 今天,小编就来为大家详细解读一下这个问题。 Python…

red6.4 mysql_rhel6.4 yum本地yum源配置

rhel6.4 yum本地yum源配置 在安装rpm包时,总是会碰到关联的包,在安装过程中带来很多麻烦,配置yum源,自关联包安装,简单省事。配置步骤:1:mount -o loop 挂载镜像盘2:编辑rhel…

Cglib和jdk动态代理的区别

Cglib和jdk动态代理的区别 动态代理解决了方法之间的紧耦合, IOC解决了类与类之间的紧耦合! Cglib和jdk动态代理的区别? 1、Jdk动态代理:利用拦截器(必须实现InvocationHandler)加上反射机制生成一个代…

python怎么判断输入的是不是数字_如何在PYTHON里判断字符串是否为数字

1 打开JUPYTER NOTEBOOK,新建一个空白的PY文档。2 str1 "888" print(str1.isdecimal()) print(str1.isdigit()) print(str1.isnumeric()) 这是正常的整数,三种方法都是可以判断。3 str2 "二" print(str2.isdecimal()) print(str2.…

在springBoot中使用Mapper类问题_@Mapper_@MapperScan_xml文件跟mapper分开_xml文件跟mapper在同一个目录下

文章目录背景xml文件跟mapper分开application.properties方式一: 主程序中MapperScan方式二: 每个接口添加Mapper注意点xml文件跟mapper在同一个目录下SpringBoot中关于Mapper 和 Repository 的一些疑问1. Mapper2. Repository3. MapperScan(“com.xxx.x…

上海交大python答案_上海交通大学python期末考试样题加解析

上海交通大学python期末考试样题加解析 一、选择题: 将唯一正确的选项写在题前括号中.每题2 分. 【 】(1) 本课程的目标定位是什么? [A] 学习Python 语言 [B] 学习计算机的工作原理 [C] 学习各种算法 [D] 学习用计算机解决问题 【 】(2) 下列哪个标识符是合法的? [A] var-nam…

python提供两种基本循环结构_Python中的循环结构

Python主要有for循环和while循环两种形式的循环结构,多个循环可以嵌套使用,并且还经常和选择结构嵌套使用。while循环一般用于循环次数难以提前确定的情况,当然也可以用于循环次数确定的情况;for循环一般用于循环次数可以提前确定…

hbase1.1.1 连接集群_Hadoop2.7.1+Hbase1.1.2集群环境搭建(10) hadoop hbase kerberos

1.hadoop安全机制历史在Hadoop1.0.0或者CDH3 版本之前, hadoop并不存在安全认证一说。默认集群内所有的节点都是可靠的,值得信赖的。用户与HDFS或者M/R进行交互时并不需要进行验证。导致存在恶意用户伪装成真正的用户或者服务器入侵到hadoop集群上&#…