POJ 3984-迷宫问题 (dfs)

【代码超详解】POJ 3984 迷宫问题(BFS 求最短路 + DFS从终点回溯输出最短路,0 ms) 一、题目描述 迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 46805 Accepted: 25576(2019/11/2) Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,... 阅读详情

定义一个二维数组:

int maze[5][5] = {

0, 1, 0, 0, 0,

0, 1, 0, 1, 0,

0, 0, 0, 0, 0,

0, 1, 1, 1, 0,

0, 0, 0, 1, 0,

};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
Input
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
Output
左上角到右下角的最短路径,格式如样例所示。
Sample Input

0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

Sample Output

(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)

题意描述:
给一个5*5的矩阵打印出从(0,0)这个点到(4,4)这个点的最短路径。

解释:
为什么要用两次dfs呢?
因为dfs在找最短路时是把所有的点全部遍历一遍,因此就会出现明明已经找到最短的道路了,
可是点还没有遍历完,因此后几个点的坐标就会出现错误,所以才需要用两次dfs。第一个找最短路,第二个打印路径。

AC代码:

#include<stdio.h>
#include<string.h>

int min=99999999,flag=0;
int next[4][2]={1,0, -1,0, 0,-1, 0,1};
int a[10][10],b[25],c[25],book[10][10];
//找出最短路径 
void dfs1(int x,int y,int step)
{
	int k,tx,ty;
	if(x==4&&y==4){
		if(min>step)
			min=step;	
		return ;
	}
	
	for(k=0;k<4;k++){
		tx=x+next[k][0];
		ty=y+next[k][1];
		
		if(tx<0||ty<0||tx>4||ty>4)
			continue;
		if(book[tx][ty]==0&&a[tx][ty]==0){
			book[tx][ty]=1;
			dfs1(tx,ty,step+1);
			book[tx][ty]=0;
		}	
	}
 } 
 //打印路径 
 void dfs(int x,int y,int step)
{
	int k,tx,ty;
	if(x==4&&y==4){
		if(step==min&&flag==0)
		{
			flag=1;
			for(int i=0;i<min;i++)
				printf("(%d, %d)\n",b[i],c[i]);
		}
		return ;
	}
	
	for(k=0;k<4;k++){
		tx=x+next[k][0];
		ty=y+next[k][1];
		
		if(tx<0||ty<0||tx>4||ty>4)
			continue;
		if(book[tx][ty]==0&&a[tx][ty]==0){
			book[tx][ty]=1;
			b[step]=tx;c[step]=ty;
			dfs(tx,ty,step+1);
			book[tx][ty]=0;
		}	
	}
 } 
 
 int main(void)
 {
 	int i,l,k;
 	for(i=0;i<5;i++)
 		for(l=0;l<5;l++){
 			scanf("%d",&a[i][l]);
 			book[i][l]=0;
		 }
	
	for(i=0;i<25;i++)
		b[i]=c[i]=0;
		
	book[0][0]=1;
	dfs1(0,0,1);
	dfs(0,0,1);
	return 0;
  } 
NetApp 7-mode初始化详解(原AGGR重建)及注意事项 没想到有生之年还能再写个7-mode的文章,上次接触可能已将近十年,本次恰巧碰到这个机会,边学习边整理,整整一天时间,碰到了不少坑,作为记录。 阅读详情

相关推荐

华为云CodeHub保姆级教程:从零开始,5分钟搞定本地代码上传(含常见报错解决)

本文提供华为云CodeHub的保姆级教程,从零开始5分钟完成本地代码上传,涵盖环境准备、仓库创建、远程连接及常见报错解决。特别适合新手开发者快速掌握Git命令与云端协作流程,确保代码安全高效上传。

weixin_30443075的博客 480

迷宫的路径输出(dfs)

递归,堆栈记录路径,dfs非最短路径

m0_68565376的博客 877

智能车竞赛走马观碑组:如何高效识别目标板并优化绕行策略(附实战代码)

本文深入探讨了智能车竞赛走马观碑组中,如何构建从图像识别到路径决策的全栈优化方案。针对目标板识别与绕行策略的核心难点,文章详细解析了基于MobileNetV2的高效识别流水线、结合预瞄点与纯追踪算法的平滑路径规划,以及横向与纵向协同控制策略,并提供了实战代码与调试指南,旨在全面提升小车的比赛表现。

o5p6q的博客 884

迷宫问题(POJ-3984循环用BFS-C语言)

定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 Input 一个5 × 5的二维数组,表示一个迷...

weixin_44313771的博客 518

滑模控制算法——基本原理(附MATLAB程序)

选择一个滑模面和是设计参数。是滑模面函数,通常我们希望系统状态在的面上滑动。我们以一个简单的二阶系统作为示例,其状态空间方程为:是系统矩阵是输入矩阵是输出矩阵假设我们的系统如下:滑模控制算法的核心在于设计合适的滑模面和控制律,并分析系统在滑模面上的稳定性。通过上述公式和步骤,可以有效地设计滑模控制器,以处理具有非线性和不确定性的动态系统。总的来说,滑模控制算法因其鲁棒性和灵活性在处理复杂控制问题中表现出色,但在实际应用中需要精心设计以克服抖振现象和其他潜在问题。BuxuABDC。

qq_35623594的博客 2万+

MaixCAM2 4K AI相机硬件解析与开发实战

嵌入式AI视觉开发中,边缘计算设备的选择直接影响项目落地效果。以NPU为核心的AI加速技术通过专用指令集优化,可在低功耗下实现10+TOPS算力,典型应用包括工业质检、智能门禁等实时场景。MaixCAM2作为新一代4K AI相机,搭载AX630 SoC芯片,其双核Cortex-A53与NPU的异构架构,在运行YOLOv11n模型时可达113FPS,显著优于传统方案。开发时需注意模型量化部署技巧,如INT8量化需500+张校准图片覆盖多光照条件,避免准确率下降。设备扩展性方面,PMOD接口支持热成像、ToF传

weixin_30819085的博客 690

POJ - 3984 迷宫问题(bfs+路径标记)

定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 Input 一个5 × ...

。 352

操作系统 | 知识梳理 | 复习(上)

操作系统复习

知识库搭建ing 3476

迷宫问题(BFS记录路径)

BFS走迷宫一般是两种问题,第一种是问最短路线,第二种是问最短路径长度,今天我向大家介绍第一种输出走迷宫的路径。 先放一个经典例题: 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 输出从迷宫左上角走到右下角的最

Stephen_Curry___的博客 1318

PCL Trimmed ICP实现点云精配准【2025最新版】

博客长期更新,本文最新更新时间为:2025年6月25日。抄袭狗记得来抄最新代码哦,抄都抄成错的,不够丢人钱。

点云侠的博客 37万+

python利用IQR方法与3σ方法进行异常值处理(含代码)

python利用IQR方法进行异常值处理

weixin_46713695的博客 2031

POJ - 1167 ---dfs进阶题

The Buses POJ - 1167 题意:小明在站口M记录这一个小时车子到站的时间,判断至少有多少种车子经过的线路? 每辆车至少要经过两次 如果两辆车子的线路是相同的,那么其时间间隔也是相同的 如果两辆车子的线路是不同的,那么其时间间隔也可能是相同的 我们简化问题:给了n个数(a1,a2,..an),at=ai+t*k(k为0,1,2,(59-ai)/t) --- at...

weixin_30594001的博客 183

【用unity实现100个游戏之16】Unity程序化生成随机2D地牢游戏1(附项目源码)

关于使用TileMap生成随机2D地图,其实之前已经有做过类似的,感兴趣可以看看 但是随着学习深入,发现之前做的比较粗糙和不够全面,最近又在外网看到

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2215

poj dfs相关之3984 迷宫问题

poj dfs相关之3984 迷宫问题

ziqi9216的博客 353

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

POJ 3984 迷宫问题 DFS

迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10818   Accepted: 6458 Description 定义一个二维数组:  int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0,

Moressette流沙的博客 752

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

poj 3984 迷宫问题 dfs 求迷宫路径

题目地址:http://poj.org/problem?id=3984 利用图论中深搜的思想,存在边就是x,y ->  x+1,y  还有x,y -> x,y+1   然后仍然是访问未访问的而且不是墙壁的地方。  这样保证不走已经搜索过,走不通的路。 唯一一种需要重复访问已经访问的结点的情况是已经无路可走了,只能返回,这样就在栈中将路径取出来,把自己现在的那个先pop掉,然后实现回溯。 最后

Jingqi@Mr.B的ACM博客 4035

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【POJ - 3984】迷宫问题(dfs)

-->迷宫问题 Descriptions: 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上...

weixin_30401605的博客 147

K - 迷宫问题 POJ - 3984

K - 迷宫问题 POJ - 3984 K: 普通的走迷宫问题。BFS都快写完了才发现它要求输出路径,考虑到只是个5*5迷宫且路径唯一,DFS可行。 首先这题和P1101 单词方阵这题很像,关键点在于要把记录路径的结构体数组也作为参数传入DFS函数中,从而达到“只保存最短路径”的目的。 然后也出了一点小差错,比如说因为它是5*5迷宫,不知怎么的就觉得走5步就可以了……可能是因为参考了上面这道单...

我于万物之中 245

POJ 3984 迷宫问题 BFS DFS两种解法

题目地址:点这里迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18495 Accepted: 10947 Description定义一个二维数组: int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1,

carbite1923 566

POJ 3984 迷宫问题 (DFS(深度优先搜索))

迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6322   Accepted: 3673 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0,

公众号:ByteCode 2177

DFS深度优先搜索(1)--poj3984(基本模板题)

迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下

Sly_461的博客 7669

迷宫问题 POJ - 3984【简单搜索】

迷宫问题 POJ - 3984 题目 思路:直接bfs用一个标记数组标记所进行的操作最后dfs输出路径 具体代码如下 #include<iostream> #include<queue> #include<cstdio> #include<cstring> #define x first #define y second using namespace std; typedef pair<int, int> PII; const int N

qq_50702668的博客 149

POJ - 3984 - 迷宫问题 (DFS)

迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10936   Accepted: 6531 Description 定义一个二维数组:  int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0,

Never say never 1393

POJ - 3984 迷宫问题(染色+dfs)

题目链接: https://vjudge.net/problem/POJ-3984 题解: 没有用到队列,和小队里的人探讨了一下,想了一个染色+dfs的方法 AC代码 #include <iostream> #include <cstdio> #include <fstream> #include <algorithm> #include &l...

Sky丨Star的博客 437

POJ 3984 迷宫问题 【DFS】

题目链接:http://poj.org/problem?id=3984 题意:中文题…… 解析:图不大,dfs直接做,到终点时更新下路径就好#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <queue> using namespace s

22h's Blog 729
上一篇: HDU-1114 Piggy-Bank —DP最小装载
下一篇: HDU-2546-饭卡(dp)
鳳九~
博客等级 码龄8年 1384粉丝 215原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值