通过一个解救小哈的游戏,来学习深度优化搜索算法。

规则如下:

小哈被困在终点,小哼从(1,1)出发去找小哈,每一步只能选择往上下左右走一格,不能走到锁所在地格子上,也不能走出图片限定的区域,求出小哼走到终点走过的最短路程。

实现程序如下所示。规定,小哼移动的优先级为:右>下>左>上,让小哼在每一格都进行上下左右的尝试。

#include<stdio.h>
#include<iostream>
using namespace std;int mi = 999, p, q, n, m;
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} // 向上走};for (int i = 0; i < 4; i++) {for (int j = 0; j < 2; j++) {cout << "next[" << i << "][" << j << "] = " << next[i][j] << endl;}}cout <<endl << endl << endl << endl;int tx, ty, k;if (x == p && y == q) {//判断是否到达终点cout << "到达终点!" << endl;if (step < mi) {//更新最小值mi = step;cout << "更新最小值为:" << mi << endl;}return;}// 枚举四种走法for (k = 0; k < 3; k++){//计算下一个点的坐标tx = x + next[k][0];ty = y + next[k][1];cout << "下一个点坐标为:(" << tx << "," << ty << ")" << endl;if (tx<1 || tx>n || ty<1 || ty>m) {//判断是否越界continue;}if (a[tx][ty] == 0 && book[tx][ty] == 0) {// 判断该点是否为障碍物或者已经在路径中book[tx][ty] = 1;//标记这一点已经走过cout << "我已经走到了(" << tx << "," << ty << ")" << endl;dfs(tx, ty, step + 1);//开始尝试下一个点book[tx][ty]=0;//尝试结束,取消这个点的标记}}return;
}int main()
{int i, j, startx, starty;cout << "请输入迷宫的长和宽" << endl;cin >> n >> m;cout << "请输入迷宫图像" << endl;for (i = 1; i <= n; i++) {for (j = 1; j <= m; j++) {cin >> a[i][j];}}cout << "请输入起点坐标和终点坐标 " << endl;cin >> startx >> starty >> p >> q;book[startx][starty] = 1;dfs(startx, starty, 0);//输出最短步数cout << "最短步数为: " << mi;return 0;
}

《啊哈算法》学习五 解救小哈相关推荐

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

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

  2. 算法学习(五)---队列

    package com.tw.dst.sq; /** * <p>队列是一种先进先出(FIFO)的线性数据结构,常用操作有插入(insert)和删除(remove)</p> *  ...

  3. 宽搜 c语言,啊哈算法之宽搜BFS解救小哈

    简述 本算法摘选自啊哈磊所著的<啊哈!算法>第四章第三节的题目--BFS算法再次解救小哈.文中代码使用C语言编写,博主通过阅读和理解,重新由Java代码实现了一遍,以此来理解BFS算法.关 ...

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

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

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

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

  6. 啊哈算法-DFS解救小哈python版

    DFS 啊哈算法-解救小哈 maze_map = [] n,m = map(int,(input()).split()) maze_map = [input().split() for i in ra ...

  7. AI火爆干货最全整理!五套深度学习和算法学习教程和三套Python学习视频!!!限时无套路免费领取!...

    点击蓝色"AI专栏"关注我哟 选择"星标",重磅干货,第一时间送达 这是站长第 31 期免费送丰富宝贵的干货资源与教程 本期绝对是满满的干货! 获取更多资源请关 ...

  8. 基于MVS的三维重建算法学习笔记(五)— 立体匹配经典算法PatchMatch论文翻译及要点解读

    基于MVS的三维重建算法学习笔记(五)- 立体匹配经典算法PatchMatch论文翻译及要点解读 声明 问题提出 问题建模 通过PatchMatch获取平面参数--Inference via Patc ...

  9. 解救小哈(dfs)-->改编自《啊哈!算法》

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

最新文章

  1. 超详细的 Redis Cluster 官方集群搭建指南,适用于 redis 5.x, 6.x
  2. 数据窗口retrieve查询结果生成新表_SQL系列之窗口函数及经典使用场景,如topN排名问题...
  3. ssh端口映射,本地转发
  4. 做一个像Keras在线技术文档(Sphinx + GitHub + Read the Docs)
  5. python中import与input_python : import详解。
  6. php 正则表达式 ies,正则表达式模式修正符(/ies)
  7. JDK8 SE安装步骤
  8. 【主席树】bzoj1112: [POI2008]砖块Klo
  9. AcWing 873. 欧拉函数(单个欧拉模板)
  10. android api (82) —— InputConnection [输入法]
  11. Matlab信号处理综合工具
  12. 2021年 win10 Flash 不可用解决方法
  13. excel信息表怎么转换成word形式?在线免费转换2步完成
  14. 深入研究webrtc平滑发送(paced sender)
  15. Android stdio报错:“xxx keeps stopping“解决方案
  16. TikZ示例——Venn图绘制(机器学习有关概念的关系)
  17. 《高等数学》 总结 导数、微分、不定积分
  18. 【SDPTWVRP】基于matlab头脑风暴算法求解带时间窗和同时取送货车辆路径问题【含Matlab源码 1990期】
  19. oracle1455解决方法,oracle_1455_错误解决办法.doc
  20. 2019SUSCTF安德门

热门文章

  1. 乐视电视投屏投不了是什么原因
  2. EAUML日拱一卒-为类添加操作和方法
  3. U盘损坏了变成未格式化?如何格式化U盘而不丢失数据?
  4. 利用临床数据库就能发SCI?看完这篇!直呼做临床数据分析超简单
  5. 保健操作软件行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  6. 阴阳师电脑版安装显示服务器错误,阴阳师电脑版安装失败 无法进入游戏问题解决办法...
  7. Windows Subsystem for Android 下载地址,在 Windows 11 上运行 Android 系统
  8. 从零开始,搭建博客系统MVC5+EF6搭建框架(1),EF Code frist、实现泛型数据仓储以及业务逻辑
  9. 【词性的选择与所放位置练习题】主语的选择-动词
  10. 【机器学习】常用聚类算法 整理