图论:一文教你读懂常见的图遍历算法

在这里插入图片描述

一文教你读懂常见的图遍历算法

  1. 深度优先搜索(DFS):
  • 从一个起始节点开始,访问该节点并将其标记为已访问。
  • 递归地访问所有与当前节点直接相连且未被访问过的节点。
  • 重复上述步骤,直到所有节点都被访问过或没有未访问的节点。
  1. 广度优先搜索(BFS):
  • 从一个起始节点开始,将其放入队列中,并标记为已访问。
  • 重复以下步骤直到队列为空:
    • 从队列中取出一个节点。
    • 访问该节点。
    • 将与该节点直接相连且未被访问的节点放入队列中,并标记为已访问。
  1. Dijkstra算法:
  • 创建一个距离数组和一个标记数组,用于存储从起始节点到每个节点的最短距离和是否被访问的标记。
  • 初始化距离数组为无穷大,起始节点的距离为0。
  • 重复以下步骤直到所有节点都被访问过:
    • 选择距离数组中未被访问的节点中距离最小的节点作为当前节点。
    • 更新与当前节点直接相连的节点的最短距离,如果新的距离比原来的距离小,则更新距离数组。
    • 标记当前节点为已访问。
  1. Bellman-Ford算法:
  • 创建一个距离数组,用于存储从起始节点到每个节点的最短距离。
  • 初始化距离数组为无穷大,起始节点的距离为0。
  • 重复以下步骤n-1次(n为节点数):
    • 遍历所有边,对每条边进行松弛操作:如果通过该边可以获得更短的路径,则更新距离数组。
  • 检查是否存在负权环。如果在第n次迭代中仍然可以松弛边的距离,则存在负权环。
  1. Floyd-Warshall算法:
  • 创建一个二维距离矩阵,用于存储任意两个节点之间的最短距离。
  • 初始化距离矩阵,如果两个节点之间存在边,则距离为边的权重,否则为无穷大。
  • 重复以下步骤,更新距离矩阵中的值:
    • 对于每对节点i和j,遍历所有节点k,如果从i到j经过k的距离更短,则更新距离矩阵中的值。
  1. 拓扑排序:
  • 拓扑排序用于有向无环图(DAG)中的节点排序,使得对于任意两个节点u和v,如果存在从u到v的路径,则u在排序中出现在v之前。
  • 进行拓扑排序的方法是使用DFS或BFS。
  • 对于DFS拓扑排序:
    • 从一个未被访问的节点开始,递归地访问与该节点相连的未被访问的节点。
    • 在访问完一个节点的所有相邻节点后,将该节点添加到排序结果的开头。
  • 对于BFS拓扑排序:
    • 统计每个节点的入度(即有多少条边指向该节点)。
    • 将入度为0的节点放入队列中。
    • 重复以下步骤直到队列为空:
      • 从队列中取出一个节点,将其添加到排序结果中。
      • 减少与该节点相邻节点的入度。
      • 如果某个节点的入度变为0,则将其加入队列中。
  1. 强连通分量算法:
  • 强连通分量是指有向图中的一组节点,其中任意两个节点都可以相互到达。
  • Tarjan算法是一种常用的强连通分量算法。
  • Tarjan算法使用DFS遍历图,通过维护一个栈和一个索引值来判断是否存在强连通分量。
  • 在进行DFS遍历时,为每个节点分配一个唯一的索引值,并记录每个节点的索引值和最小可达索引值。
  • 当遍历到一个节点时,将其压入栈中,并将其索引值和最小可达索引值设置为当前索引值。
  • 如果遍历到的节点还没有被访问过,继续递归遍历其相邻节点,并更新最小可达索引值。
  • 如果遍历到的节点已经被访问过,且仍在栈中,则将其最小可达索引值与当前节点的索引值进行比较,如果相等,则将栈中的节点弹出,并形成一个强连通分量。

互联网大厂测开经历,目前担任测试开发负责人,每天分享互联网面经,如果你有测试相关的问题,欢迎咨询,海鲜市场【简历优化】、【就业指导】、【模拟/辅导面试】,已辅导20位以上同学拿到心仪offer

简历修改119/次
模拟面试149/小时
测试开发工具指导149/小时

海鲜市场

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【分享 网络墙测试】检测当前网络是否能用于其他平台,速度检测

文章日期:2024.04.17 类型:软件分享 兼容:win10 / win11 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解密处理(直接解密即可)(crypto-js.js 标准算法&#xff09…

为什么科拓停车选择OceanBase来构建智慧停车SaaS应用

本文来自OceanBase的客户——拓客停车的实践分享 科拓停车简介与业务背景 作为智慧停车行业的佼佼者,科拓停车致力于提供全方位的智慧停车解决方案。服务涵盖车场运营管理、互联网智慧停车平台以及停车场增值服务等。通过不断研发创新,打造出了多样化的…

国内最具有影响力的三个 3D 视觉方向平台!

3D视觉工坊 我的朋友创办的「3D视觉工坊」公众号,由多名名校硕博士和大厂算法工程师共同运营,博主及合伙人参与研发过多种3D视觉产品,包括割草机、自动驾驶、工业3D相机等,有着非常丰富的落地经验。主要专注于3D高斯、工业3D视觉…

【Excel2LaTeX】复杂表格制作的解决方案

刚开始用LaTeX写论文,遇到的第一道坎就是绘制表格,较小的普通表格可以通过简单的语法实现,但是较大的复杂的表格却让我无从下手。 Excel2LaTeX插件 这里介绍一种我用到非常顺手的工具:Excel2LaTeX插件,下载地址&#x…

SSH协议的优缺点

SSH(Secure Shell)是一种用于在计算机网络上进行安全远程访问和执行命令的协议。提供加密通信通道,防止敏感信息在传输过程中被窃听或篡改。SSH还支持文件传输和端口转发等功能,使其成为广泛使用的安全远程管理工具。 1. 安全远程…

对桥接模式的理解

目录 一、背景二、桥接模式的demo1、类型A(形状类型)2、类型B(颜色类型)3、需求:类型A要使用类型B(如:红色的方形)4、Spring的方式 一、背景 在《对装饰器模式的理解》中&#xff0…

MySQL 基础使用

文章目录 一、Navicat 工具链接 Mysql二、数据库的使用1.常用数据类型2. 建表 create3. 删表 drop4. insert 插入数据5. select 查询数据6. update 修改数据7. delete 删除记录truncate table 删除数据 三、字段约束字段1. 主键 自增delete和truncate自增长字段的影响 2. 非空…

CS学习(九)—— 分支实现

if-else 18&#xff1a;若y<x&#xff0c;跳转L2 22&#xff1a;否则&#xff0c;跳转L3。 goto 可见&#xff0c;与if-else类似。但是用goto很low。 条件表达式 又是与if类似&#xff0c;那有没有区别&#xff1f; 当然&#xff0c;条件表达式两个式子都会计算&…

html、css、京东移动端静态页面,资源免费分享,可作为参考,提供InsCode在线运行演示

CSDN将我上传的免费资源私自变成VIP专享资源&#xff0c;且作为作者的我不可修改为免费资源&#xff0c;不可删除&#xff0c;寻找客服无果&#xff0c;很愤怒&#xff0c;&#xff08;我发布免费资源就是希望大家能免费一起用、一起学习&#xff09;&#xff0c;接下来继续寻找…

Leetcode 15. 三数之和(暴力->双指针)

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例 1…

git clone报错:error invalid path ‘dorisdockerthirdpartiesdocker-composexxxx‘

git clone报错&#xff1a;error: invalid path ‘doris/docker/thirdparties/docker-compose/xxxx’ 在周日晚上&#xff0c;我尝试从GitHub上克隆Doris的代码库&#xff0c;以便进行学习。在使用IntelliJ IDEA进行克隆时&#xff0c;我遇到了一个Git错误。具体操作如下&…

UbuntuServer22.04安装docker

通过ubuntuserver安装docker是搭建开发环境最便捷的方式之一。下面介绍一下再ubuntu22.04上如何安装docker。相关内容参考官网链接&#xff1a;Install Docker Engine on Ubuntu 根据官网推荐&#xff0c;利用apt命令的方式安装&#xff0c;首先需要设置docker仓库&#xff0c…

✌粤嵌—2024/4/3—合并K个升序链表

代码实现&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* merge(struct ListNode *l1, struct ListNode *l2) {if (l1 NULL) {return l2;}if (l2 NULL) {return l1;}struct Lis…

杰发科技AC7840——CAN通信简介(4)_过滤器设置

0. 简介 注意&#xff1a;过滤器最高三位用不到&#xff0c;因此最高位随意设置不影响过滤器。 1. 代码分析 注意设置过滤器数量 解释的有点看不懂 详细解释...也看不大懂 Mask的第0位是0&#xff0c;其他位都是1(就是F?)&#xff0c;那就指定了接收值就是这个数&#xff0c;…

深度强化学习(DRL)算法 附录 6 —— NLP 回顾之预训练模型篇

Self-Attention 模型结构 上图架构以 batch_size 为 1&#xff0c;两个时间步的 X 为例子&#xff0c;计算过程如下&#xff1a; 位置编码 根据 self-attention 的模型结构&#xff0c;改变 X 的输入顺序&#xff0c;不影响 attention 的结果&#xff0c;所以还需要引入额外的…

解决Linux根分区空间不足的方法:利用Home分区进行扩容

前言 在进行系统安装时&#xff0c;一个常见的困扰是默认分区设置可能导致home分区拥有过多的空间&#xff0c;而root分区却显得十分紧缺。这种情况下&#xff0c;用户往往会陷入无法继续安装软件或存储文件的困境。本文将向您展示如何通过合理的调整&#xff0c;将home分区中多…

《剑指 Offer》专项突破版 - 面试题 111 : 计算除法(C++ 实现)

题目链接&#xff1a;计算除法 题目&#xff1a; 输入两个数组 equations 和 values&#xff0c;其中&#xff0c;数组 equations 的每个元素包含两个表示变量名的字符串&#xff0c;数组 values 的每个元素是一个浮点数值。如果 equations[i] 的两个变量名分别是 和 &#…

接口测试——postman

一.下载与安装 https://www.getPostman.com/ 界面导航说明 二.get请求 第一个get请求 批量执行接口请求&#xff1a; 1. 右击run collection 2. 会出现runner标签页 携带参数的GET请求 所谓的查询参数&#xff0c;其实就是URL地址中问号&#xff08;?&#xff09;后面的部分…

易基因: MeRIP-seq揭示lncRNA甲基化通过lncRNA-miRNA/蛋白质轴抑制胃癌干细胞凋亡|文献解读

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 癌症一直是生物学研究的热门话题。关于癌症起源&#xff0c;一种主流观点是癌症干细胞&#xff08;Cancer Stem Cell&#xff0c;CSC&#xff09;的无限增殖。CSC是肿瘤内肿瘤细胞的一个…

textview允许长文本下滑

原本是用scroview textview的&#xff0c;结果长文本的时候&#xff0c;textview会把文本内容截断&#xff1b; 后面在网上找到直接使用textview就能解决长文本问题&#xff0c; 关键代码还是这两个 android:scrollbars“vertical” tv_message_message.setMovementMethod(…