图论基础1

图的储存方式

邻接矩阵

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

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

邻接表

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

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

图的遍历方式

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

深搜

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

故dfs常用递归实现

1.确认递归函数,参数

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

2.确认终止条件

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

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

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

广搜

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

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

能保存遍历过元素的容器

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

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

相关推荐
工业胶粘剂技术1 小时前
单组分高温环氧结构胶 K-EP280 完整技术参数与工程选型分析
算法·制造
小欣加油2 小时前
Leetcode31 下一个排列
数据结构·c++·算法·leetcode·职场和发展
_日拱一卒2 小时前
LeetCode:39组合总和
java·算法·leetcode·职场和发展
无限进步_2 小时前
【Linux】进程状态、僵尸与孤儿、进程调度
linux·运维·服务器·开发语言·数据结构·算法
郝学胜-神的一滴2 小时前
力扣 662 :二叉树最大宽度
java·数据结构·c++·python·算法·leetcode·职场和发展
2301_764441332 小时前
基于Stackelberg博弈的分散式库存模型
python·算法·数学建模
qq 13740186112 小时前
医用无菌屏障系统加速老化标准解读:ASTM F1980-2016 全解析
人工智能·算法·加速老化·包装测试·astm·医疗器械包装·无菌屏障系统
wayz112 小时前
Overlap:SLOPE(线性回归斜率)技术指标详解
算法·金融·数据分析·回归·线性回归·量化交易·特征工程
点云兔子2 小时前
舱口检测:从点云到矩形定位的射线投影算法
opencv·算法·点云·舱口检测
小欣加油2 小时前
leetcode169 多数元素
数据结构·c++·算法·leetcode·职场和发展