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;
  } 
Android HAL 架构详解,底层开发不再难 HAL Binder 这套机制牛在哪?性能:一次拷贝,快如闪电。规范:HIDL 让接口定义整齐划一,维护省心。兼容:版本管理做得好,新老设备都能跑。有了这套通信体系,HAL 就像打了通脉,上下贯通,硬件操作变得丝滑无比。通信机制搭好了桥,接下来 HAL 得真正把手伸到硬件上。这部分是 HAL 的 “最后一公里”,直接决定硬件能不能被用起来。HAL 的接口定义是整个体系的灵魂,它决定了上层和底层怎么 “说话”。 阅读详情

相关推荐

方差迭代计算公式

方差迭代计算过程推导术语约定递推公式过程推导 术语约定 (1)En=1n∑i=1nxi E_n =\frac{1}{n} \sum_{i=1}^{n}x_i \tag{1} En​=n1​i=1∑n​xi​(1) (2)F(n)=∑i=1n(x2−En) F(n) = \sum_{i=1}^{n}{(x^2-E_n)} \tag{2} F(n)=i=1∑n​(x2−En​)(2) (3)V(n)...

weixin_44479136的博客 7921

迷宫的路径输出(dfs)

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

m0_68565376的博客 877

PCB线路板的制作工艺流程分享!2021-08-21

Pcb板制作工艺流程:开料-钻孔-沉铜-压膜-曝光-显影-电铜-电锡-退膜-蚀刻-退锡-光学检测-印阻焊油-阻焊曝光、显影-字符-表面处理-成型-电测-终检-抽测-包装。具体如下:1、开料(CUT) 将原始的覆铜板切割成可以用在生产线上制作的板子过程2、钻孔 使PCB板层间产生通孔,以达到连通层间的目的。 3、沉铜 经过钻孔后的线路板在沉铜缸内会发生氧化还原反应,形成铜层对孔进行孔金属化,使原来绝缘的基材表面沉积上铜,达到层间电性相通。 4、压膜 压膜后的PCB板上面压了一层蓝色的干膜, 干膜是一个载体

jdbpcb88的博客 3246

迷宫问题(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

lego-loam featureAssociation 源码注释(五)

上一次我们已经看完了特征提取,这次我们进入特征匹配的内容!!!systemInitedLM的初始值为false。

Joeybee的博客 889

vuecli3 实现 移动端和pc端 界面切换(两套代码)

适合场景 多页面多系统应用 所有系统都在同一目录下。配置多入口多出口。每个系统之间可以链接。每个系统内依然采用Vue单页应用开发。 产品需求:一套代码 兼容pc端和移动端 , 移动端和pc端的样式布局差别很大,需要使用多界面,并判断使用手机的时候跳转移动端代码,使用pc端跳转pc端代码。 项目目录 分为两部分代码,pc 和mobile 第一步:创建一个登陆页面的文件 在项目public文件夹下创建一个login.html,其实就是将index.html复制一份,将title改一下: <!DOCTYP

你怎么也喜欢嘴巴嘟嘟 5920

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

Python实战:5分钟搞定高德地图API批量地址转经纬度(附完整代码)

本文提供了一套完整的Python解决方案,利用高德地图Web服务API,实现批量地址到经纬度坐标的自动化转换。文章包含从API申请、核心代码编写到错误处理与性能优化的全流程实战指南,并附赠数据可视化方法,帮助数据分析师和开发者快速提升地理信息处理效率。

weixin_29047919的博客 582

迷宫问题(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

渗透测试实战—云渗透(AK/SK泄露)

渗透测试实战思路分享:getshell方法及横向移动方法,云安全(AK/SK泄露)

网安日记本的博客 4051

水文仿真软件:HEC-RAS (Hydrologic Engineering Center‘s River Analysis System)_(7).一维非稳态水力模型

自定义脚本是通过编程语言(如 Python)编写的一系列自动化任务,可以帮助用户更高效地处理数据和运行模型。编写脚本:使用 Python 或其他编程语言编写自定义脚本。集成脚本:将脚本集成到 HEC-RAS 中,实现自动化数据处理和模型运行。

kkchenjj的博客 932

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

深入解析基于Fluent的蒸发冷凝相变UDF程序及其在重力热管液体蒸发冷凝变化计算中的应用

ANSYS Fluent是一款功能强大的CFD软件,广泛应用于流体流动、传热、化学反应和多相流等领域的数值模拟。Fluent提供了丰富的物理模型和求解器,支持用户自定义函数(UDF)以扩展其功能,实现更为复杂和特定的模拟需求。UDF是用C语言编写的程序,允许用户在Fluent中自定义物理模型、边界条件、源项等,以实现特定的模拟需求。在处理复杂的相变过程、非均匀物性参数或特定的热传导机制时,UDF提供了极大的灵活性和扩展性。

qq_38334677的博客 1265

poj dfs相关之3984 迷宫问题

poj dfs相关之3984 迷宫问题

ziqi9216的博客 353

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

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

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【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、付费专栏及课程。

余额充值