C语言实现DFS和BFS

DFS(深度优先搜索)和BFS(广度优先搜索)是图论中常用的两种搜索方式。下面将介绍如何使用C语言实现DFS和BFS算法。

深度优先搜索(DFS)

DFS算法是一种用于遍历或搜索树或图的算法。 该算法从根结点开始,尽可能深地搜索树的分支,当遇到无法向下搜索的结点时,回溯到父结点,继续搜索下一分支。DFS算法可以使用递归函数或堆栈数据结构来实现。

下面是使用C语言实现DFS算法的代码:

#include <stdio.h>
#define MAX_NODES 100int visited[MAX_NODES]; // 标记节点是否被访问过
int graph[MAX_NODES][MAX_NODES]; // 图的邻接矩阵
int n; // 图的大小void dfs(int node) {visited[node] = 1;printf("%d ", node);for (int i = 0; i < n; i++) {if (graph[node][i] && !visited[i]) {dfs(i);}}
}int main() {// 假设图的大小为n,邻接矩阵为graph// 初始化visited数组为0for (int i = 0; i < n; i++) {visited[i] = 0;}int start_node = 0; // 从节点0开始遍历dfs(start_node);return 0;
}

上述代码中,首先定义了两个全局变量:visited和graph,用于标记节点是否被访问过和表示图的邻接矩阵。然后定义了一个递归函数dfs,该函数从指定的节点开始遍历图,标记该节点为已访问,打印节点值,然后继续遍历与该节点相邻的未访问节点。在main函数中,初始化visited数组为0,然后从节点0开始遍历图。

广度优先搜索(BFS)

BFS算法是一种用于遍历或搜索树或图的算法。该算法从根结点开始,逐层遍历每个节点的所有子节点,直到遇到目标结点或遍历完整个图。BFS算法可以使用队列数据结构来实现。

下面是使用C语言实现BFS算法的代码:

#include <stdio.h>
#define MAX_NODES 100int visited[MAX_NODES]; // 标记节点是否被访问过
int graph[MAX_NODES][MAX_NODES]; // 图的邻接矩阵
int n; // 图的大小void bfs(int start_node) {int queue[MAX_NODES]; // 队列用于存储待访问节点int front = 0, rear = 0;queue[rear++] = start_node;visited[start_node] = 1;while (front < rear) {int curr_node = queue[front++];printf("%d ", curr_node);for (int i = 0; i < n; i++) {if (graph[curr_node][i] && !visited[i]) {visited[i] = 1;queue[rear++] = i;}}}
}int main() {// 假设图的大小为n,邻接矩阵为graph// 初始化visited数组为0for (int i = 0; i < n; i++) {visited[i] = 0;}int start_node = 0; // 从节点0开始遍历bfs(start_node);return 0;
}

上述代码中,首先定义了两个全局变量:visited和graph,用于标记节点是否被访问过和表示图的邻接矩阵。然后定义了一个函数bfs,该函数从指定的节点开始遍历图,使用队列数据结构存储待访问节点,标记已访问的节点,打印节点值,然后将与该节点相邻的未访问节点加入队列。在main函数中,初始化visited数组为0,然后从节点0开始遍历图。

总结:

以上就是使用C语言实现DFS和BFS算法的代码,这两种算法都是图论中常用的搜索算法,可以通过递归函数或堆栈数据结构实现DFS算法,可以通过队列数据结构实现BFS算法。

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

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

相关文章

JVM进阶(2)

一)方法区: java虚拟机中有一个方法区&#xff0c;该区域被所有的java线程都是共享&#xff0c;虚拟机一启动&#xff0c;运行时数据区就被开辟好了&#xff0c;官网上说了方法区可以不压缩还可以不进行GC&#xff0c;JAVA虚拟机就相当于是接口&#xff0c;具体的HotSpot就是虚…

虹科案例 | 使用虹科MSR147WD测试自行车背包的热生理舒适性

使用虹科MSR147WD测试自行车背包的热生理舒适性 在进行运动活动时&#xff0c;佩戴背包会对穿戴者的舒适度产生影响&#xff0c;并且也会对热调节产生影响&#xff0c;类似于一件服装的作用。为了优化背包的材料和设计属性&#xff0c;我们利用MSR Electronics GmbH的微型数据记…

Java实现Csv文件导入导出

Java实现Csv文件导入导出 什么是.csv文件&#xff1f; CSV&#xff08;Comma-Separated Values&#xff0c;逗号分隔的值&#xff09;是一种简单、实用的文件格式&#xff0c;用于存储和表示包括文本、数值等各种类型的数据。CSV 文件通常以 .csv 作为文件扩展名。这种文件格…

C语言编写图形化界面-创建按钮-为其指定样式

文章目录 前置章节指定窗口样式给按钮加边框扁平化按钮复选框样式按钮自动复选框 单选按钮三态按钮自动三态按钮 默认按钮样式&#xff08;对话框Enter键&#xff09; 设置按钮位置和大小封装函数 前置章节 开始之前&#xff0c;需要学习以下章节&#xff1a; 创建窗口 窗口过…

力扣第435题 无重叠区间 c++ 贪心思维

题目 435. 无重叠区间 中等 相关标签 贪心 数组 动态规划 排序 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,…

Python的Pandas库(二)进阶使用

Python开发实用教程 DataFrame的运算 DataFrame重载了运算符&#xff0c;支持许多的运算 算术运算 运算方法运算说明df.add(other)对应元素的加&#xff0c;如果是标量&#xff0c;就每个元素加上标量df.radd(other)等效于otherdfdf.sub(other)对应元素相减&#xff0c;如果…

NAT技术与代理服务器

目录 一、NAT与NAPT技术 1.NAT技术 2.NAPT技术 &#xff08;1&#xff09;四元组的唯一性 &#xff08;2&#xff09;数据的传输过程 &#xff08;3&#xff09;NAPT的缺陷 二、代理服务器 1.正向代理和反向代理 2.代理服务器的应用 &#xff08;1&#xff09;游戏加…

图纸管理制度《四》

1、目的 使公司的图纸得到有效的控制&#xff0c;确保生产所用的图纸为最新有效版本&#xff0c;避免因图纸管理不当造成的损失。 2、定义 本制度所述的图纸包括产品总装图、装配图、零件图、工装图纸、检具图纸、包装图纸、工艺流程 3、范围 客户提供的图纸&#xff0c;技…

Kotlin 使用@BindingAdapter编译出错

在 Kotlin 中使用 BindingAdapter 注解时&#xff0c;需要确保你的项目正确配置了 Data Binding。 首先&#xff0c;请确保在项目的 build.gradle 文件中启用了 Data Binding&#xff1a; android {// ...dataBinding {enabled true} }接下来&#xff0c;请确保你在正确的地…

selenium+python web自动化测试框架项目实战实例教程

自动化测试对程序的回归测试更方便。 由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行... 可以运行更加繁琐的测试 自动化测试的一个明显好处就是可以在很短的时间内运行更多的测试。学习自动化测试最终目的是应用到实际项目中&…

LabVIEW应用开发——基本函数(一)

前面我们介绍了一些控件的介绍和属性的配置&#xff0c;想要完成一个软件只会拖控件肯定是不行的&#xff0c;没办法实现既有的功能。比如我们要实现从串口中读到数据&#xff0c;根据一定的协议解析&#xff0c;然后转换成各个参数的值的显示&#xff0c;包括时间、电压、电流…

796. 子矩阵的和(左上角前缀和)

题目&#xff1a; 796. 子矩阵的和 - AcWing题库 思路&#xff1a; 1.暴力搜索&#xff08;搜索时间复杂度为O(n2)&#xff0c;很多时候会超时&#xff09; 2. 前缀和&#xff08;左上角前缀和&#xff09;&#xff1a;本题特殊在不是直接求前n个数的和&#xff0c;而是求…

第1篇 目标检测概述 —(3)目标检测评价指标

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。目标检测评价指标是用来衡量目标检测算法性能的指标&#xff0c;主要包括几个指标&#xff1a;精确率&#xff08;Precision&#xff09;、召回率&#xff08;Recall&#xff09;、交并比&#xff08;IoU&#xff09;、平均…

最后一个单词的长度[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个字符串s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个单词的长度。单词是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1&#xff1a; 输入&#xff1a;s Hell…

UI自动化测试是什么?什么项目适合做UI自动化测试

UI 测试是一种测试类型&#xff0c;也称为用户界面测试&#xff0c;通过该测试&#xff0c;我们检查应用程序的界面是否工作正常或是否存在任何妨碍用户行为且不符合书面规格的 BUG。了解用户将如何在用户和网站之间进行交互以执行 UI 测试至关重要&#xff0c;通过执行 UI 测试…

Flink Hive Catalog操作案例

在此对Flink读写Hive表操作进行逐步记录&#xff0c;需要指出的是&#xff0c;其中操作Hive分区表和非分区表的DDL有所不同&#xff0c;以下分别记录。 基础环境 Hive-3.1.3 Flink-1.17.1 基本操作与准备 1、上传依赖jar包到flink/lib目录下 cp flink-sql-connector-hive-…

【成功实现】CentOS磁盘扩容

对服务器磁盘扩容操作步骤 查看磁盘信息 fdisk -l 创建新分区 fdisk /dev/sda P n p … t 回车 8e w 重启虚拟机 reboot mkfs.ext4 /dev/sda4 查看磁盘信息 fdisk -l 创建物理卷 pvcreate /dev/sda4 y 创建卷组 并绑定物理卷 vgcreate centos /dev/sda4 创建逻辑…

golang小技巧

1/有时需要把json内容返回给前段进行文本编辑json字段&#xff0c;那么最好是能返回格式化后的json&#xff0c;这样对于用户编辑页方便。这时候可以利用json.MarshalIndent(data, "", "\t")来进行格式化&#xff0c;带有缩进的marshal。 2/对holders的填…

如何使用SpringBoot处理全局异常

如何使用SpringBoot处理全局异常 使用ControllerAdvice 和 ExceptionHandler处理全局异常 参考&#xff1a; ControllerAdvice ResponseBody Slf4j public class ExceptionHandler {ResponseStatus(HttpStatus.OK)org.springframework.web.bind.annotation.ExceptionHandler…

基于springboot实现校友社交平台管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现校友社交平台管理系统演示 摘要 校友社交系统提供给用户一个校友社交信息管理的网站&#xff0c;最新的校友社交信息让用户及时了解校友社交动向,完成校友社交的同时,还能通过论坛中心进行互动更方便。本系统采用了B/S体系的结构&#xff0c;使用了java技…