定义一个二维数组:

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)相关推荐

  1. 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】

    POJ3126Prime Path 给定两个四位素数a  b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数  与  前一步得到的素数  只能有一个位 ...

  2. 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, ...

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

    题目地址:点这里 迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18495 Accepted: 10947 Descr ...

  4. POJ 3984 迷宫问题 BFS求最短路线+路径记录

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31050   Accepted: 17826 Descriptio ...

  5. 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, ...

  6. (简单) 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, ...

  7. poj 3984 迷宫问题 BFS

    /* 题目: 求最少时间从(0,0)走到(4,4)的路径 分析: 纯粹BFS题目,不过需要打印路径,可以用数组记录当前的坐标的上一个坐标, 因为BFS构造出一棵BFS最优生成树,每一个节点的父母节点都 ...

  8. K - 迷宫问题 POJ - 3984

    K - 迷宫问题 POJ - 3984 5*5迷宫,输出从(0,0)走到(4,4)的最短路径 类似康托,自己弄个一一对应的公式即可 #include<iostream> #include& ...

  9. 蓝桥杯-迷宫(DFS)

    蓝桥杯-迷宫(DFS) 题目描述 X 星球的一处迷宫游乐场建在某个小山坡上.它是由 10 \times 1010×10 相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡 ...

  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 ...

最新文章

  1. java丑数算法_LintCode Java算法练习(4)-----丑数II
  2. 根治“Microsoft JET Database Engine 错误 80004005”
  3. 日立服务器显示地址操作异常,日立电梯服务器地址操作异常
  4. 0603封装继承多态,综合练习
  5. 作为一个开发者,我创业了
  6. 「硬见小百科」压合突发异常处理方法
  7. c语言求m n最小公倍数,最大公因数和最小公倍数的求法 求mn的最大公约数C语言...
  8. 适合各种创业者借鉴的案例,老板创业2个小时卖了9万元!
  9. 2021江苏省高考成绩排名查询,江苏高考成绩排名查询系统,2021年江苏个人成绩一分一段表...
  10. 解决Android手机开发者选项经常自动关闭的问题
  11. nextcloud配置邮箱发送邮件
  12. CloudCompare 可视化——Scale Filed
  13. NPOI导出数据,设置格式,锁定单元格
  14. 倾城北栀:4.30日晚间行情分析以及操作策略
  15. 【深入理解计算机系统 01】计算机系统漫游
  16. 小米pro如何关闭安全启动_Apple的新安全功能不会让您维修MacBook Pro或iMac Pro [更新]...
  17. 读《白鹿原》有感其二之乡约小谈
  18. 海口火车站-机场-汽车南站-海口东站(高铁站、动车站]
  19. 克鲁斯卡尔算法解决公交站问题
  20. Kali 2022.2 安装 CALDERA(避坑指南)

热门文章

  1. Promise.all等待方法执行完毕再执行
  2. 职业 行业 2 博客
  3. activiti工作流学习(二)
  4. 全球与中国PMN-PT单晶市场深度研究分析报告
  5. m73p黑苹果_现阶段最便宜的完美黑苹果配置是什么?
  6. 新整理的开源Odoo13发布更新的部分功能模块信息
  7. 传递给数据库 'master' 中的日志扫描操作的日志扫描号无效
  8. 使用 Prometheus-Operator 监控 Calico(网络监控)
  9. 针对云主机卡死问题的定位分析方法
  10. android jetpack ViewModel 报错解决方法