图搜索算法详解:广度优先搜索与深度优先搜索的探索之旅

图搜索算法详解:广度优先搜索与深度优先搜索的探索之旅

  • 1. 广度优先搜索(BFS)
    • 1.1 伪代码
    • 1.2 C语言实现
  • 2. 深度优先搜索(DFS)
    • 2.1 伪代码
    • 2.2 C语言实现
  • 3. 总结

图搜索算法是计算机科学中用于在图结构中查找路径的算法。图由顶点(或节点)和边组成,它们可以表示各种类型的数据和它们之间的关系。图搜索算法可以分为两大类:广度优先搜索(BFS)和深度优先搜索(DFS)。下面我将分别介绍这两种算法,并提供伪代码和C语言的实现示例。

在这里插入图片描述

1. 广度优先搜索(BFS)

广度优先搜索是一种遍历图的算法,它从一个节点开始,逐层遍历图中的所有节点。BFS常用于寻找最短路径。

1.1 伪代码

BFS(G, start_v):创建队列Q创建一个访问标记数组visited将start_v入队Qvisited[start_v] = truewhile Q非空:取出队列中的第一个节点vfor 每个节点v的邻居w:if w未被访问:将w入队Qvisited[w] = true

1.2 C语言实现

#include <stdio.h>
#include <stdlib.h>#define MAX_NODES 1000int visited[MAX_NODES]; // 访问标记数组
int graph[MAX_NODES][MAX_NODES]; // 邻接矩阵表示图
int numVertices; // 顶点数量void bfs(int start_v) {int Q[MAX_NODES], front = 0, rear = 0; // 用数组模拟队列visited[start_v] = 1;Q[rear++] = start_v; // 将起始顶点加入队列while (front != rear) {int v = Q[front++]; // 从队列中取出顶点printf("Visited: %d\n", v);for (int i = 0; i < numVertices; i++) {if (graph[v][i] && !visited[i]) {visited[i] = 1;Q[rear++] = i; // 将邻居加入队列}}}
}int main() {// 初始化图和顶点数量// ...// 调用BFS函数bfs(0); // 假设从顶点0开始return 0;
}

2. 深度优先搜索(DFS)

深度优先搜索是一种遍历图的算法,它从一个节点开始,尽可能深地搜索图的分支。当节点v的邻接边都已经被搜索过时,算法会回溯到前一个节点。

2.1 伪代码

DFS(G, v):如果v已经被访问过,则返回visited[v] = true访问顶点vfor 每个v的邻居w:如果w未被访问:DFS(G, w)

2.2 C语言实现

#include <stdio.h>
#include <stdlib.h>void dfs(int v) {visited[v] = 1;printf("Visited: %d\n", v);for (int i = 0; i < numVertices; i++) {if (graph[v][i] && !visited[i]) {dfs(i);}}
}int main() {// 初始化图和顶点数量// ...// 调用DFS函数dfs(0); // 假设从顶点0开始return 0;
}

3. 总结

广度优先搜索和深度优先搜索都是图搜索中的基础算法,它们在不同场景下有着广泛的应用。BFS适合寻找最短路径,而DFS适合解决连通性问题或作为其他算法的组成部分,如最小生成树或拓扑排序。

请注意,上述代码示例是简化的版本,实际应用中可能需要更复杂的数据结构和错误检查。此外,图的表示方法除了邻接矩阵外,还有邻接表等,具体实现会根据图的大小和稀疏程度进行选择。

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

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

相关文章

Phi-3-mini-4k-instruct 的功能测试

Model card 介绍 Phi-3-Mini-4K-Instruct 是一个 3.8B 参数、轻量级、最先进的开放模型&#xff0c;使用 Phi-3 数据集进行训练&#xff0c;其中包括合成数据和经过过滤的公开可用网站数据&#xff0c;重点是 高品质和推理密集的属性。 该型号属于 Phi-3 系列&#xff0c;Mini…

牛客热题:合并升序链表

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;合并升序链表题目链接方法一&am…

Python --- 新手小白自己动手安装Anaconda+Jupyter Notebook全记录(Windows平台)

新手小白自己动手安装AnacondaJupyter Notebook全记录 这两天在家学Pythonmathine learning&#xff0c;在我刚刚入手python的时候&#xff0c;我写了一篇新手的入手文章&#xff0c;是基于Vs code编译器的入手指南&#xff0c;里面包括如何安装python&#xff0c;以及如何在Vs…

使用riscv-tests进行指令测试(二)

使用riscv-tests进行指令测试&#xff08;二&#xff09; 1 测试用例命名规则2 测试用例dump文件介绍 本文属于《 TinyEMU模拟器基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 测试用例命名规则 用例名称 TVM Name “-” Target Environment Name “-” “指令”…

面试题:分布式消息中间件 MQ

MQ官网文档&#xff1a; RabbitMQ&#xff1a;https://www.rabbitmq.com/docs RocketMQ&#xff1a;https://rocketmq.apache.org/zh/docs/ Kafka&#xff1a;https://kafka.apache.org/documentation/ DDMQ&#xff1a;https://base.xiaojukeji.com/docs/ddmq 面试题&#xff…

场景文本检测识别学习 day07(BERT论文精读)

BERT 在CV领域&#xff0c;可以通过训练一个大的CNN模型作为预训练模型&#xff0c;来帮助其他任务提高各自模型的性能&#xff0c;但是在NLP领域&#xff0c;没有这样的模型&#xff0c;而BERT的提出&#xff0c;解决了这个问题BERT和GPT、ELMO的区别&#xff1a; BERT是用来…

微信小程序:11.本地生活小程序制作

开发工具&#xff1a; 微信开发者工具apifox进行创先Mock 项目初始化 新建小程序项目输入ID选择不使用云开发&#xff0c;js传统模版在project.private.config中setting配置项中配置checkinalidKey&#xff1a;false 梳理项目结构 因为该项目有三个tabbar所以我们要创建三…

springboot拦载器

1、拦载器 package com.Interceptor;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.security.auth.login.Log…

Linux基本指令(3)

目录 时间相关的指令&#xff1a; 1.在显示方面&#xff0c;使用者可以设定欲显示的格式&#xff0c;格式设定为一个加好后接数个标记&#xff0c;其中常用的标记列表如下&#xff1a; 2.在设定时间方面&#xff1a; 3.时间戳&#xff1a; Cal指令&#xff1a; find指令&a…

部署YUM仓库和NFS共享存储服务

目录 1. YUM仓库服务 1.1 YUM概述 1.2 准备安装源 1.3 yum在线源替换方法 2.制作YUM源 2.1制作ftp源 3.yum软件包的下载方式 4.NFS共享存储服务 4.1 NFS 4.2 NFS网络文件系统 4.3 NFS配置 1. YUM仓库服务 1.1 YUM概述 yum是一个基于RPM包&#xff08;是Red-Ha…

Java包装类,128陷阱

包装类 基本数据类型都有自己对应的包装类&#xff0c;因为Java本质是面向对象编程的&#xff0c;一切的内容在Java看来都是对象 但是基本数据类型没有类&#xff0c;也没有对象&#xff0c;这样就有了矛盾 所以诞生了基本类型的包装类 基本数据类型&#xff1a; byte,short,…

K8S哲学 - probe 探针

探针分类&#xff1a; liveness probe readiness probe startup probe Liveness Probe&#xff1a;用于检查容器是否还在运行。如果 Liveness Probe 失败&#xff0c;Kubernetes 会杀死容器&#xff0c;然后根据你的重启策略来决定是否重新启动容器。常见的做法是使用与 Readin…

Mysql 、Redis 数据双写一致性 更新策略与应用

零、important point 1. 缓存双写一致性问题 2. java实现逻辑&#xff08;对于 QPS < 1000 可以使用&#xff09; public class UserService {public static final String CACHE_KEY_USER "user:";Resourceprivate UserMapper userMapper;Resourceprivate Re…

如何申请免费SSL证书,把网站升级成HTTPS

HTTPS&#xff08;Hyper Text Transfer Protocol Secure&#xff09;是一种用于安全数据传输的网络协议&#xff0c;它可以有效地保护网站和用户之间的通信安全。然而&#xff0c;要使一个网站从HTTP升级到HTTPS&#xff0c;就需要一个SSL证书。那么&#xff0c;如何申请免费的…

Transformer模型详解01-Word Embedding

文章目录 前言Transformer 整体结构Transformer 的输入单词 Embedding原理CBOW 模型one-hot构建 CBOW 训练数据集构建 CBOW 神经网络训练 CBOW 神经网络 Skip-gram 模型one-hot构建 Skip-gram训练数据集训练 Skip-gram神经网络 Word2Vec实例数据训练保存和加载 前言 Transform…

STM32使用PWM控制舵机

STM32使用PWM控制舵机 1、舵机的控制原理 舵机是一种位置伺服驱动器&#xff0c;是一种带有输出轴的小装置。当我们向伺服器发送一个控制信号时&#xff0c;输出轴就可以转到特定的位置。只要控制信号持续不变&#xff0c;伺服机构就会保持相对的角度位置不变。如果控制信号发…

虹科Pico汽车示波器 | 免拆诊断案例 | 2006 款林肯领航员车发动机怠速抖动

故障现象 一辆2006款林肯领航员车&#xff0c;搭载5.4 L发动机&#xff0c;累计行驶里程约为26万km。该车因发动机怠速抖动故障进厂维修&#xff0c;维修人员更换了火花塞、点火线圈及凸轮轴位置传感器&#xff0c;清洗了积炭和喷油器&#xff0c;故障依旧&#xff0c;于是向笔…

02_c/c++开源库ZeroMQ

1.安装 C库 libzmq sudo apt install libzmq3-dev 实例: https://zeromq.org/get-started/?languagec&librarylibzmq# 编译依赖: pkg-config --cflags --libs libzmq or cat /usr/lib/x86_64-linux-gnu/pkgconfig/libzmq.pc -isystem /usr/include/mit-krb5 -I/usr/in…

Mybatis-Plus学习:快速入门、核心功能、扩展功能、插件功能

文章目录 MybatisPlus快速入门快速开始常见注解常见配置 核心功能条件构造器&#xff08;Wrapper&#xff09;自定义SQLService接口基本用法基础业务接口复杂业务接口Lamda查询Lamda更新批量新增 扩展功能代码生成代码生成器快速开发插件 静态工具逻辑删除枚举处理器JSON处理器…

一例MFC文件夹病毒的分析

概述 这是一个MFC写的文件夹病毒&#xff0c;通过感染USB设备传播&#xff0c;感染后&#xff0c;会向c2(fecure.info:443)请求指令来执行。 样本的基本信息 Verified: Unsigned Link date: 19:52 2007/7/5 MachineType: 32-bit MD5: 4B463901E5858ADA9FED28FC5…