当前位置: 首页 > article >正文

图论基础1

图的储存方式

邻接矩阵

用 二维数组来表示图结构。 邻接矩阵是从节点的角度来表示图,有多少节点就申请多大的二维数组。

  • 在 边少,节点多的情况下,会导致申请过大的二维数组,造成空间浪费。
  • 检查任意两个顶点间是否存在边的操作非常快
  • 适合稠密图,在边数接近顶点数平方的图中,邻接矩阵是一种空间效率较高的表示方法。

邻接表

用 数组 + 链表的方式来表示。 邻接表是从边的数量来表示图,有多少边 才会申请对应大小的链表。

  • 对于稀疏图的存储,只需要存储边,空间利用率高
  • 遍历节点连接情况相对容易
  • 检查任意两个节点间是否存在边,效率相对低,

图的遍历方式

在图(邻接表或邻接矩阵)上进行搜索的算法

深搜

dfs是朝一个方向去搜,一条路跑到黑,直到搜不下去了,再换方向(换方向的过程就涉及到回溯)

故dfs常用递归实现

1.确认递归函数,参数

需要 :二维数组数组结构保存所有路径,维数组保存单一路径,可以定义成全局变量

2.确认终止条件

不仅是结束本层递归,同时也是我们收获结果的

3.处理目前搜索节点出发的路径

一个for循环,去遍历 目前搜索节点 所能到的所有节点。

广搜

bfs是先把本节点所连接的所有节点遍历一遍,走到下一个节点的时候,再把连接节点的所有节点遍历一遍,搜索方向是一圈一圈的,四面八方的搜索过程。

正是因为BFS一圈一圈的遍历方式,所以一旦遇到终止点,那么一定是一条最短路径。

能保存遍历过元素的容器

  • 用队列的话,就是保证每一圈都是一个方向去转,例如统一顺时针或者逆时针
  • 用栈的话,就是第一圈顺时针遍历,第二圈逆时针遍历,第三圈有顺时针遍历

注意:只要加入队列就代表走过,需要标记,而不是从队列拿出来的时候再去标记走过。防止重复加入队列。


http://www.kler.cn/news/294521.html

相关文章:

  • 重启顺风车的背后,是高德难掩的“野心”
  • 高分辨率音频和传统音频区别
  • 学习笔记--Docker
  • 【机器学习】朴素贝叶斯网络的基本概念以及朴素贝叶斯网络在python中的实例
  • 【SpringBoot】使用Nacos服务注册发现与配置管理
  • 主板选购2
  • 【C/C++】Linux\Windows为什么频繁使用size_t
  • 服务器蓝屏该怎么办
  • Vue3 父子传参 简单易懂
  • Mybatis Plus快速重构真批量sql入库操作
  • PLC+AIoTedge边缘物联网平台能否替代 PLC+Wincc?
  • 13. 说说 MyBatis 的缓存机制?
  • MySQL 数据库管理与操作指南
  • 自定义view中常用到哪些方法作用分别是什么
  • 专栏前言-WooYun漏洞库环境搭建
  • Java详解String 字符串类以及String内存原理、StringBuilder类、StringJoiner类(附有代码+案例)
  • MASt3R:从3D的角度来实现图像匹配(更新中)
  • 前端工程化2:从0-1的eslint插件开发教程
  • 基于Prometheus 和K8S kubernetes 构建 搭建监控告警系统
  • 单点登录:cas单点登录实现原理浅析
  • 【Vue】状态管理模式Vuex
  • 通信工程学习:什么是AM标准调幅
  • [情商-13]:语言的艺术:何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相!
  • Redis在登录接口中实现token时间的自适应增长
  • mysql5.6根据经纬度查询距离
  • 亚马逊测评深度解析:如何安全高效提升产品销量和好评
  • HTB-Pennyworth(cve查询 和 exp使用)
  • 《征服数据结构》差分数组
  • 【K8S实践笔记】Kubernetes Dashboard v2.7.0 的安装与配置(2)
  • 【Windows】【C++】【Udp】 udp通信协议详解和示例