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

@[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全流程班,帮助企业研发管理者学习这套结构化流程,其中划下重点…

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语言里面的整数数据类型。看到这里你可能想问,一个整数而已,为什么会需要定义这么多的类型出来呢?要知…

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

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

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

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

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…

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

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

SSM框架中mapper和mapping.xml文件在同一个包下需要的配置

前言 当我们在开发过程中,由于maven项目本身的限制,我们不能直接把我们的mapper.xml文件和对应mapper.java接口文件放到一起,也就是不能直接放在java包中,如图: 因为maven项目在构建打包时,会从src/main…

mysql配置文件简易代码_MySQL配置文件my.cnf 例子最详细翻译

转的MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔记用。#BEGIN CONFIG INFO#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大#TYPE: SYSTEM#END CONFIG INFO## 此mysql配置文件例子针对4G内存。# 主要使用INNODB#处理复杂队列并且连接数量较少的mysql服务器#…

Spring+Mybatis使用MapperScannerConfigurer简化配置__MapperScannerConfigurer的作用

SpringMybatis使用MapperScannerConfigurer简化配置 MyBatis的一大亮点就是可以不用DAO层的实现类,而我们知道service层调dao层 如果没有实现类,Spring如何为Service注入DAO的实例呢? 比如 现在有一个dao层的bookmapper和配置mybatis的xm…

python的property用法_在python中property怎样使用-百度经验

在python中property可以使类中的方法变为类中的属性一样来使用,使得类中的属性值不易暴露,更加安全,那么在python中property怎样使用呢?下面小编就带大家来看看详细的教程!工具/原料 python的版本:python 3…

Spring AOP 实现原理

什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构&…