《啊哈算法》学习五 解救小哈
通过一个解救小哈的游戏,来学习深度优化搜索算法。
规则如下:
小哈被困在终点,小哼从(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;
}
《啊哈算法》学习五 解救小哈相关推荐
- 《啊哈算法》学习六 解救小哈2.0
今天还是通过解救小哈的游戏,来学习广度优先搜索算法. 规则如下: 小哈被困在终点,小哼从(1,1)出发去找小哈,每一步只能选择往上下左右走一格,不能走到锁所在地格子上,也不能走出图片限定的区域,求出小 ...
- 算法学习(五)---队列
package com.tw.dst.sq; /** * <p>队列是一种先进先出(FIFO)的线性数据结构,常用操作有插入(insert)和删除(remove)</p> * ...
- 宽搜 c语言,啊哈算法之宽搜BFS解救小哈
简述 本算法摘选自啊哈磊所著的<啊哈!算法>第四章第三节的题目--BFS算法再次解救小哈.文中代码使用C语言编写,博主通过阅读和理解,重新由Java代码实现了一遍,以此来理解BFS算法.关 ...
- 解救小哈——DFS算法举例
一.问题引入 有一天,小哈一个人去玩迷宫.但是方向感不好的小哈很快就迷路了.小哼得知后便去解救无助的小哈.此时的小哼已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈.那么,问题来了... 二. ...
- JAVA算法:解救小哈(JAVA版)
JAVA算法:解救小哈(JAVA版) 有一天,小哈一个人去玩迷宫.但是方向感不好的小哈很快就迷路了.小哼得知后便去解救无助的小哈.此时的小哼已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈.那 ...
- 啊哈算法-DFS解救小哈python版
DFS 啊哈算法-解救小哈 maze_map = [] n,m = map(int,(input()).split()) maze_map = [input().split() for i in ra ...
- AI火爆干货最全整理!五套深度学习和算法学习教程和三套Python学习视频!!!限时无套路免费领取!...
点击蓝色"AI专栏"关注我哟 选择"星标",重磅干货,第一时间送达 这是站长第 31 期免费送丰富宝贵的干货资源与教程 本期绝对是满满的干货! 获取更多资源请关 ...
- 基于MVS的三维重建算法学习笔记(五)— 立体匹配经典算法PatchMatch论文翻译及要点解读
基于MVS的三维重建算法学习笔记(五)- 立体匹配经典算法PatchMatch论文翻译及要点解读 声明 问题提出 问题建模 通过PatchMatch获取平面参数--Inference via Patc ...
- 解救小哈(dfs)-->改编自《啊哈!算法》
[算法描述] 有一天,小哈一个人去玩迷宫.但是方向感不好的小哈很快就迷路了.小哼得知后便去解救无助的小哈.此时的小哼已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈.那么,问题就此开始了... ...
最新文章
- 超详细的 Redis Cluster 官方集群搭建指南,适用于 redis 5.x, 6.x
- 数据窗口retrieve查询结果生成新表_SQL系列之窗口函数及经典使用场景,如topN排名问题...
- ssh端口映射,本地转发
- 做一个像Keras在线技术文档(Sphinx + GitHub + Read the Docs)
- python中import与input_python : import详解。
- php 正则表达式 ies,正则表达式模式修正符(/ies)
- JDK8 SE安装步骤
- 【主席树】bzoj1112: [POI2008]砖块Klo
- AcWing 873. 欧拉函数(单个欧拉模板)
- android api (82) —— InputConnection [输入法]
- Matlab信号处理综合工具
- 2021年 win10 Flash 不可用解决方法
- excel信息表怎么转换成word形式?在线免费转换2步完成
- 深入研究webrtc平滑发送(paced sender)
- Android stdio报错:“xxx keeps stopping“解决方案
- TikZ示例——Venn图绘制(机器学习有关概念的关系)
- 《高等数学》 总结 导数、微分、不定积分
- 【SDPTWVRP】基于matlab头脑风暴算法求解带时间窗和同时取送货车辆路径问题【含Matlab源码 1990期】
- oracle1455解决方法,oracle_1455_错误解决办法.doc
- 2019SUSCTF安德门
热门文章
- 乐视电视投屏投不了是什么原因
- EAUML日拱一卒-为类添加操作和方法
- U盘损坏了变成未格式化?如何格式化U盘而不丢失数据?
- 利用临床数据库就能发SCI?看完这篇!直呼做临床数据分析超简单
- 保健操作软件行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 阴阳师电脑版安装显示服务器错误,阴阳师电脑版安装失败 无法进入游戏问题解决办法...
- Windows Subsystem for Android 下载地址,在 Windows 11 上运行 Android 系统
- 从零开始,搭建博客系统MVC5+EF6搭建框架(1),EF Code frist、实现泛型数据仓储以及业务逻辑
- 【词性的选择与所放位置练习题】主语的选择-动词
- 【机器学习】常用聚类算法 整理