【算法】(BFS/DFS)迷宫路径问题(C语言)

这篇具有很好参考价值的文章主要介绍了【算法】(BFS/DFS)迷宫路径问题(C语言)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 问题分析

题目:现有一迷宫如下图所示,蓝色部分为墙壁,白色部分为通路,入口在左上角(1,1)处,出口在右下角(8,8)处,试找出一条路径以通过该迷宫(路径不能重叠)。
【算法】(BFS/DFS)迷宫路径问题(C语言)

分析
① 使用二维数组来存储迷宫,墙用 1 表示,路用 0 表示,如下图所示:
【算法】(BFS/DFS)迷宫路径问题(C语言)为与题目中的入口坐标 (1,1) 和出口坐标 (8,8) 对应,二维数组第 0 行和第 0 列不存储迷宫,用 1 填充。

② 对于任意一点(x,y),下一步都有前后左右四个可能的方向,即(x+1,y),(x-1,y),(x,y+1),(x,y-1),使用 fx[4] = { -1,1,0,0 }和 fy[4] = { 0,0,-1,1 } 来模拟下一步走向。

③ 搜索方式可以选择广度优先搜索(BFS)深度优先搜索(DFS)。广度优先搜索利用了队列的先进先出性质,找到的路径是一条最短的通路;深度优先搜索利用了递归回溯的思想,所找到的路径不一定是一条最短通路

2. 基于BFS搜索一条路径

使用数组来模拟队列操作实现广度优先搜索,设置队头队尾指示器qh和qe,通过这两个变量的增减来模拟入队和出队操作。

搜索过程如下图所示:
【算法】(BFS/DFS)迷宫路径问题(C语言)
若其中某一步时队列为空(即qh==qe),说明该迷宫没有通路。

2.1 完整代码及注释文章来源地址https://www.toymoban.com/news/detail-471793.html

# include<stdio.h>
# define N 9

int maze[N][N] = {
   {
   1,1,1,1,1,1,1,1,1},		//迷宫,1表示墙,0表示路,入口为maze[1][1],出口为maze[8][8]
				 {
   1,0,0,0,0,0,0,0,0},		//maze[0][0]至maze[0][8]和maze[0][0]至maze[8][0](即第一行和第一列)不在迷宫范围内,用1填充。
				 {
   1,0,1,1,1,1,0,1,0},
				 {
   1,0,0,0,1,1,0,1,0},
				 {
   1,0,1,0,0,0,0,1,0},
				 {
   1,0,1,0,1,1,0,1,0},
				 {
   1,0,1,0,0,0,0,1,1},
				 {
   1,0,1,0,0,1,0,0,0},
				 {
   1,0,1,1,1,1,1,1,0}};
int fx[4] = {
    -1,1,0,0 }, fy[4] = {
    0,0,-1,1 };		//每个点的上下左右四个方向扩展

struct {
   			//存放路径坐标和前一个坐标的位置
	int x, y, pre;
}sq[100];

int Check(int i, int j);			//检查当前坐标是否可行
void Output(int qe);				//输出路径坐标

/*模拟队列操作实现广度优先搜索*/
void Path_Search() {
   
	int i, j, k, qh = 0, qe = 1;
	maze[1][1] = -1;				//置-1表示当前坐标已走过
	sq[1].pre = 0;
	sq[1

到了这里,关于【算法】(BFS/DFS)迷宫路径问题(C语言)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (3)【全局路径规划】图搜索的路径探索方法--DFS\BFS\DFS-ID、贪心算法、Dijkstra和A*、JPS、.hybird A*、

    提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理

    2024年02月15日
    浏览(30)
  • 【数据结构】迷宫问题DFS非递归(c语言实现)

    本来之前写过一个推箱子,就想着写个迷宫游戏,因为想着推箱子游戏里面也有墙,也有玩家的移动,比推箱子简单的是还不用判断前面是否有箱子的情况,但是自己写的迷宫游戏如果自己随机生成的迷宫地图的话,不一定会有通路,他要学一个什么随机迷宫的生成,刚看完

    2024年02月08日
    浏览(28)
  • 深入探索图算法:用C语言实现BFS和DFS

    图算法是计算机科学中一个重要且有趣的领域,它们在解决许多现实世界的问题时发挥着关键作用。本篇博客将介绍两种常见的图算法:广度优先搜索(BFS)和深度优先搜索(DFS),并提供在C语言中的实现示例。 广度优先搜索是一种用于图遍历的算法,它从起始节点开始逐

    2024年02月12日
    浏览(27)
  • 【算法详解 | DFS算法】深度优先搜索解走迷宫问题 | 深度优先图遍历

    by.Qin3Yu 本文需要读者掌握 结构体 和 栈 的操作基础,完整代码将在文章末尾展示。 特别声明:本文为了尽可能使用简单描述,以求简单明了,可能部分专有名词定义不准确。 栈相关操作可以参考我的往期博文: 【C++数据结构 | 栈速通】使用栈完成十进制数转二四八进制数

    2024年02月03日
    浏览(41)
  • 数据结构与算法大作业:走迷宫程序(C语言,DFS)(代码以及思路)

    好家伙,写大作业,本篇为代码的思路讲解   问题描述: 以一个 m * n 的长方阵表示迷宫, 0和1分别表示迷宫的通路和障碍。 设计一个程序, 对任意设定的迷宫, 求出一条从入口到出口的通路, 或得出没有通路的结论。 基本要求: (1) 实现一个以链表做存储的栈类型,

    2024年02月03日
    浏览(31)
  • BFS4专题 迷宫最短路径(输出路径)

    输入 输出         这里刚开始看的时候会可能有点复杂了,因为是递归。 但是只要理解了含义,脑袋里模拟一下还是可以理解的。首先还是 之前那样 BFS 常规搜索 只是这里不用输出步数了,所以我们可以省略一层循环,直接搜索求路径。 求路径的方法核心思想就是 记录每

    2024年02月11日
    浏览(24)
  • 1739. 迷宫的所有路径-深度优先搜索-DFS

    代码:

    2024年01月20日
    浏览(29)
  • 用栈求解迷宫问题的所有路径及最短路径程序(纯c语言)

    参考了这个博客 学校作业,在各种地方搜了半天,看别人的要么就是有点错,要么就是很复杂用了不少我不知道的库,还要么就是只求了一条路径,还要么就是用了c++没学过。 写了半天,写出了一个应该是比较简单的方法,应该是还能优化,不过作业能跑就行,懒得搞了。

    2023年04月12日
    浏览(24)
  • DFS算法详解 ---- 走迷宫

    上期内容给大家带来了排列型dfs,这期给大家带来了 使用dfs来进行图的遍历 。 首先请看题: 咱们在看这道题的时候 ,需要首先研究 迷宫如何存 ,肯定是要定义一个浮点型的二维数组对吧,那么这里我给他定义一个char board[N][N],让这个二维数组存储迷宫。 接下来就是 怎么

    2024年01月16日
    浏览(27)
  • 拓扑排序算法 -- dfs、bfs

    210. 课程表 II 该题用到「拓扑排序」的算法思想,关于拓扑排序,直观地说就是,让你把⼀幅图「拉平」,⽽且这个「拉平」的图⾥⾯,所有箭头⽅向都是⼀致的,⽐如上图所有箭头都是朝右的。 很显然,如果⼀幅有向图中存在环,是⽆法进⾏拓扑排序的,因为肯定做不到所

    2024年02月10日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包