POJ 3984-迷宫问题 (dfs)
定义一个二维数组:
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;}
POJ 3984-迷宫问题 (dfs)相关推荐
- 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】
POJ3126Prime Path 给定两个四位素数a b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数 与 前一步得到的素数 只能有一个位 ...
- POJ 3984 迷宫问题 (Dijkstra)
迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, ...
- POJ 3984 迷宫问题 BFS DFS两种解法
题目地址:点这里 迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18495 Accepted: 10947 Descr ...
- POJ 3984 迷宫问题 BFS求最短路线+路径记录
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31050 Accepted: 17826 Descriptio ...
- POJ 3984 迷宫问题
定义一个二维数组: 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, ...
- (简单) POJ 3984 迷宫问题,BFS。
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, ...
- poj 3984 迷宫问题 BFS
/* 题目: 求最少时间从(0,0)走到(4,4)的路径 分析: 纯粹BFS题目,不过需要打印路径,可以用数组记录当前的坐标的上一个坐标, 因为BFS构造出一棵BFS最优生成树,每一个节点的父母节点都 ...
- K - 迷宫问题 POJ - 3984
K - 迷宫问题 POJ - 3984 5*5迷宫,输出从(0,0)走到(4,4)的最短路径 类似康托,自己弄个一一对应的公式即可 #include<iostream> #include& ...
- 蓝桥杯-迷宫(DFS)
蓝桥杯-迷宫(DFS) 题目描述 X 星球的一处迷宫游乐场建在某个小山坡上.它是由 10 \times 1010×10 相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡 ...
- 迷宫问题 POJ - 3984
题目 定义一个二维数组: 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 ...
最新文章
- java丑数算法_LintCode Java算法练习(4)-----丑数II
- 根治“Microsoft JET Database Engine 错误 80004005”
- 日立服务器显示地址操作异常,日立电梯服务器地址操作异常
- 0603封装继承多态,综合练习
- 作为一个开发者,我创业了
- 「硬见小百科」压合突发异常处理方法
- c语言求m n最小公倍数,最大公因数和最小公倍数的求法 求mn的最大公约数C语言...
- 适合各种创业者借鉴的案例,老板创业2个小时卖了9万元!
- 2021江苏省高考成绩排名查询,江苏高考成绩排名查询系统,2021年江苏个人成绩一分一段表...
- 解决Android手机开发者选项经常自动关闭的问题
- nextcloud配置邮箱发送邮件
- CloudCompare 可视化——Scale Filed
- NPOI导出数据,设置格式,锁定单元格
- 倾城北栀:4.30日晚间行情分析以及操作策略
- 【深入理解计算机系统 01】计算机系统漫游
- 小米pro如何关闭安全启动_Apple的新安全功能不会让您维修MacBook Pro或iMac Pro [更新]...
- 读《白鹿原》有感其二之乡约小谈
- 海口火车站-机场-汽车南站-海口东站(高铁站、动车站]
- 克鲁斯卡尔算法解决公交站问题
- Kali 2022.2 安装 CALDERA(避坑指南)