博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
9.迷宫问题[第一版:递归]
阅读量:6517 次
发布时间:2019-06-24

本文共 1094 字,大约阅读时间需要 3 分钟。

先把问题做最大程度的简化,不用框一个50*50的大迷宫,只需要压缩在3*3的二维数组中模拟,这个弄清楚了,再大的也是一样。移动方向只包括下移和右移两种方式。先下移,再右移。

在这个二维数组中,约定规则:0表示通路,-1表示路径(可通过),1表示障碍物。于是得到一个二维数组的形式如下:(由于四周需要障碍物围墙,所以外围加了一层,即总共为:5*5的二维数组)

{    {
1,1,1,1,1}, {
1,0,0,1,1}, {
1,0,1,0,1}, {
1,0,0,0,1}, {
1,1,1,1,1}}

由于只能下移和右移,这就很类似于二叉树的先序遍历,所以用递归形式:

if (maze[x + 1][y] == 0) //下移      pass(x + 1, y);    if (maze[x][y + 1] == 0) //右移      pass(x, y + 1);

直接看图表示清晰:

递归最后的约束条件为最后移动到的坐标=目标坐标,即是一种可行的方式。代码如下:

/*-----完整代码@映雪-------*/#include 
using namespace std;#define MAXROW 5int maze[MAXROW][MAXROW] = { {
1,1,1,1,1}, {
1,0,0,1,1}, {
1,0,1,0,1}, {
1,0,0,0,1}, {
1,1,1,1,1}}; //迷宫数组 int InX = 1, InY = 1; // 入口int OutX = MAXROW-2,OutY = MAXROW-2 ; // 出口void print(){ for (int i = 0; i < MAXROW; i++) { for (int j = 0; j < MAXROW; j++) { if (maze[i][j] == 1) cout<<"█"; else if (maze[i][j] == -1) cout<<"◇"; else cout<<" "; } cout<

 

转载于:https://www.cnblogs.com/tinaluo/p/5290216.html

你可能感兴趣的文章
filebeat 配置文件详解
查看>>
Swift与OC混编
查看>>
CentOS 5 (64位)下lnmp平台搭建
查看>>
redhat 6.5 配置WAS控制台中文
查看>>
记录一次处理https监听不正确的过程
查看>>
SCOM 2012 SP1服务器上安装和配置Veeam MP for VMware
查看>>
多核编程的四层境界
查看>>
Windows Phone 实用开发技巧(11):让StackPanel中的控件靠右对齐
查看>>
小记如何修改xen模块
查看>>
实时游戏对战引擎Photon
查看>>
C语言位操作控件属性
查看>>
nginx的安装及基本配置,及多个域名服务
查看>>
Servlet访问postgresql数据库并提取数据显示在前端jsp页面
查看>>
不改一行代码定位线上性能问题
查看>>
定义运算符
查看>>
git管理
查看>>
告别暗黄皮肤变水嫩皮肤的8个小习惯
查看>>
加强Eclipse代码自动提示的方法
查看>>
exchange online 用户疑问之许可证和用户数据归档
查看>>
QImage Mat IplImage 之间的相互转换
查看>>