迷宫由n行m列的单元格组成(n和m都小于50),每个单元格要么是空地,要么是障碍物。你的任务是帮助小哼找到一条从迷宫的起点通往小哈所在位置的最短路径

(障碍物不能走,且不可走到迷宫外)

/*啊哈算法:解救小哈*/
#include <stdio.h>
int n,m,p,q,min=99999999;//把min设置成很大的数
int a[51][51],book[51][51];
void dfs(int x,int y,int step)
{int next[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};//这是方向数组,注意后续的应用,和平常的不一样。注意不要写成括号 int tx,ty,k;if(x==p && y==q)//判断是否到达小哈的位置 {if(step<min)//更新最小值 min = step;return ;//一定要有返回 }for(k=0;k<=3;k++)//枚举四种走法 {tx = x + next[k][0];//注意这里方向数组的应用 ty = y + next[k][1];if(tx<1 || tx>n || ty<1 || ty>m)//判断是否越界 continue;if(a[tx][ty]==0 && book[tx][ty]==0)//判断该点是否为障碍物,或者已经在路径中 {//0代表没有走过的点,1表示已经在路径中的点,其他表示障碍物 book[tx][ty] = 1;//标记这个点走过 dfs(tx,ty,step+1);//开始尝试下一个点 book[tx][ty] = 0;//尝试结束,取消标记。这一步和上一步很重要,是dfs算法的核心,但是具体为什么还不太清楚 }}return ;} int main(void){int i,j,startx,starty;scanf("%d %d",&n,&m);for(i=1;i<=n;i++)for(j=1;j<=m;j++)scanf("%d",&a[i][j]);scanf("%d %d %d %d",&startx,&starty,&p,&q);//读入起点和终点的坐标book[startx][starty]=1;//从起点开始搜索,并且标记起点已经在路径中,防止后面重复走 dfs(startx,starty,0);printf("%d",min);return 0;}

运行结果:

啊哈算法——万能的搜索——解救小哈DFS相关推荐

  1. 解救小哈——DFS算法举例

    一.问题引入 有一天,小哈一个人去玩迷宫.但是方向感不好的小哈很快就迷路了.小哼得知后便去解救无助的小哈.此时的小哼已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈.那么,问题来了... 二. ...

  2. 《啊哈算法》学习六 解救小哈2.0

    今天还是通过解救小哈的游戏,来学习广度优先搜索算法. 规则如下: 小哈被困在终点,小哼从(1,1)出发去找小哈,每一步只能选择往上下左右走一格,不能走到锁所在地格子上,也不能走出图片限定的区域,求出小 ...

  3. 《啊哈算法》学习五 解救小哈

    通过一个解救小哈的游戏,来学习深度优化搜索算法. 规则如下: 小哈被困在终点,小哼从(1,1)出发去找小哈,每一步只能选择往上下左右走一格,不能走到锁所在地格子上,也不能走出图片限定的区域,求出小哼走 ...

  4. 解救小哈(深度优先,广度优先)

    题目描述: 有一天,小哈一个去玩迷宫.但是方向感很不好的小哈很快就迷路了.小哼得知后便立即去解救无助的小哈.小哼当然是有备而来,已经弄清楚了迷宫地图,现在小哼要以最快速度去解救小哈.问题就此开始了-- ...

  5. 算法导论--广度优先搜索和深度优先搜索

    广度优先搜索 在给定图G=(V,E)和一个特定的源顶点s的情况下,广度优先搜索系统地探索G中的边,以期"发现"可从s 到达的所有顶点,并计算s 到所有这些可达顶点之间的距离(即最少 ...

  6. (四)万能的搜索 —— 2. 解救小哈

    2. 解救小哈 任务: 迷宫由n行m列的单元格组成(n和m都小于等于50),每个单元格要么是空地,要么是障碍物. 任务是帮助小哼找到一条从迷宫的起点通往小哈所在位置的最短路径.注意障碍物是不能走的,当 ...

  7. 啊哈算法—解救小哈(广度优先搜索)

    解救小哈 小哈在一个(m * n)大小的迷宫(0 ⇐ m, n ⇐ 50)里迷路了.在迷宫中,每个单元格要么是空地,要么是障碍物.现在要找到从起点到小哈位置的最短步数. 思路: 使用队列储存扩展,扩展 ...

  8. JAVA算法:解救小哈(JAVA版)

    JAVA算法:解救小哈(JAVA版) 有一天,小哈一个人去玩迷宫.但是方向感不好的小哈很快就迷路了.小哼得知后便去解救无助的小哈.此时的小哼已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈.那 ...

  9. 啊哈算法第四章 万能的搜索

    从这一章开始就真的步入对我而言全新的算法世界了(因为排序.枚举在上学期还是接触过的,而栈.队列在这学期我看的C++Primer和老师教的Java课里也有所涉及) 一.深度优先搜索(Depth Firs ...

最新文章

  1. Linux安装Hive并测试
  2. filter2D函数
  3. MySQL配置教程(图解版)
  4. 利用信号进行进程之间的通信
  5. C 库函数 - atoi()
  6. c++ map是有序还是无序的_c++ unorder_map的用法
  7. Codeforces Round #704 (Div. 2) E. Almost Fault-Tolerant Database 思维
  8. 基于ELK的简单数据分析
  9. linux输出变量的类型名称,Python 变量类型
  10. 会优化,你真的会优化吗?其实你可能真的缺少一份理解【数据库篇】
  11. SRv6技术课堂:SRv6可靠性方案(一)
  12. linux 实现秒级定时任务
  13. mysql 批量 update 多个条件_Mysql学习与巩固,超详细的小白篇
  14. 今日BIM—中交一公院发布道路专用BIM设计软件
  15. java有序的Map-LinkedHashMap
  16. Linux文件与目录常用操作
  17. dnf服务器未响应怎么解决方法,DNF地下城与勇士程序未响应怎么办——一招搞定...
  18. 小程序使用wxs处理手机号
  19. 张朝阳开课手推E=mc²,李永乐现场狂做笔记!CEO当太久都忘了他是MIT物理博士...
  20. markdown语法进阶——字体、字号与颜色设置

热门文章

  1. ChatGPT让3D猫娘有了灵魂!可实时语音互动,还能在虚拟场景中给你做饭玩猜谜...
  2. 常见的HTTP状态码有哪些
  3. 第5期:大学生入职必备技能之二
  4. 蛋糕店、面包店、西饼屋、巧克力店连锁管理系统软件
  5. 【原创】i.MXRT J-Flash烧写算法使能eFuse熔丝位写入
  6. Mendix入门教程第一篇-demo实例
  7. 少侠,送你一堆免费API
  8. 全网最新软件测试知识点总结
  9. java毕业生设计医疗健康管理平台会员管理子系统计算机源码+系统+mysql+调试部署+lw
  10. vue3 + Echarts 页面加载不渲染显示空白页面