迷宫图案,白色代表通道,黑色代表墙。
 迷宫入口坐标(1,1),出口坐标(8,8)
  0 1 2 3 4 5 6 7 8 9
  0■■■■■■■■■■
  1■□□■□□□■□■
  2■□□■□□□■□■
  3■□□□□■■□□■
  4■□■■■□□□□■
  5■□□□■□□□□■
  6■□■□□□■□□■
  7■□■■■□■■□■
  8■■□□□□□□□■
  9■■■■■■■■■■

程序源代码(VC++ 6.0下编译通过)

#include<iostream>  using namespace std;const int SIZE_X = 10;
const int SIZE_Y = 10;//data structstruct mPoint
{int x;int y;bool can_move_to;mPoint(int rx = 0, int ry = 0, bool rcan_move_to = false){x= rx;y = ry;can_move_to = rcan_move_to;next = NULL;}mPoint* next;
};//function declaration
class mStack
{
public:mStack();//constructorint push(mPoint point);mPoint pop();int getLength();mPoint getTop();void printStack();
private:mPoint *base;//base pointermPoint *top; //top pointerint length; //length of stack
};int main()
{mPoint mpArray[SIZE_X][SIZE_Y];bool initArray[SIZE_X][SIZE_Y]={{ false, false, false, false, false, false, false, false, false, false },{ false, true, true, false, true, true, true, false, true, false },{ false, true, true, false, true, true, true, false, true, false },{ false, true, true, true, true, false, false, true, true, false },{ false, true, false, false, false, true, true, true, true, false },{ false, true, true, true, false, true, true, true, true, false },{ false, true, false, true, true, true, false, true, true, false },{ false, true, false, false, false, true, false, false, true, false },{ false, false, true, true, true, true, true, true, true, false },{ false, false, false, false, false, false, false, false, false, false }};//迷宫矩阵 for(int i = 0; i<SIZE_X;i++){for(int j=0; j<SIZE_Y;j++){mpArray[i][j].x = i;mpArray[i][j].y = j;mpArray[i][j].can_move_to = initArray[i][j];}} mPoint startup(1,1,true);//entrymPoint endp(8,8,true);//exitmStack mpath;mpath.push(startup);mPoint mp = startup;while(true){if(mp.x == endp.x && mp.y == endp.y){break;}if(mpArray[mp.x+1][mp.y].can_move_to){mpArray[mp.x+1][mp.y].can_move_to=false;mpath.push(mPoint(mp.x+1,mp.y));mp = mpArray[mp.x+1][mp.y];continue;}if(mpArray[mp.x-1][mp.y].can_move_to){mpArray[mp.x-1][mp.y].can_move_to=false;mpath.push(mPoint(mp.x-1,mp.y));mp = mpArray[mp.x-1][mp.y];continue;}if(mpArray[mp.x][mp.y+1].can_move_to){mpArray[mp.x][mp.y+1].can_move_to=false;mpath.push(mPoint(mp.x,mp.y+1));mp = mpArray[mp.x][mp.y+1];continue;}if(mpArray[mp.x][mp.y-1].can_move_to){mpArray[mp.x][mp.y-1].can_move_to=false;mpath.push(mPoint(mp.x,mp.y-1));mp = mpArray[mp.x][mp.y-1];continue;}if(0 == mpath.getLength()){cout<<"No path"<<endl;return -1;}mpath.pop();mp = mpath.getTop();}cout<<"Path:"<<endl;mpath.printStack();getchar();return 0;}
mStack::mStack()
{length = 0;base = NULL;top = NULL;
}
int mStack::push(mPoint point)
{mPoint *mpNode = new mPoint();*mpNode = point;if (length == 0)top = base = mpNode;else{top->next = mpNode;top = mpNode;}return ++length;
}
mPoint mStack::getTop()
{return *top;
}
mPoint mStack::pop()
{if (length <= 0)return NULL;mPoint retPoint = *top;top = base;while (top->next != NULL){if (top->next->next == NULL){delete(top->next);top->next = NULL;break;}top = top->next;}if (length == 1){delete(base);base = top = NULL;}length--;return retPoint;
}int mStack::getLength()
{return length;
}
void mStack::printStack()
{mPoint *p = base;while (p != NULL){cout << "(" << p->x << "," << p->y << ")" << endl;p = p->next;}}

本程序堆栈用单向动态链表实现,当然可以用其他数据结构,比如双向链表。

程序输出结果:

Path:
(1,1)
(2,1)
(3,1)
(4,1)
(5,1)
(5,2)
(5,3)
(6,3)
(6,4)
(6,5)
(7,5)
(8,5)
(8,6)
(8,7)
(8,8)

逃出迷宫完整算法C++相关推荐

  1. 动画演示深度优先算法搜寻逃出迷宫的路径

    深度优先算法(DFS 算法)是什么? 寻找起始节点与目标节点之间路径的算法,常用于搜索逃出迷宫的路径.主要思想是,从入口开始,依次搜寻周围可能的节点坐标,但不会重复经过同一个节点,且不能通过障碍节点. ...

  2. 问题 H: 逃出迷宫

    问题 H: 逃出迷宫 时间限制: 1 Sec  内存限制: 128 MB 提交: 6  解决: 3 [提交][状态][讨论版] 题目描述 现在有一个迷宫,'a'代表起点位置,'.'代表可以通行的路,' ...

  3. 老鼠逃出迷宫(递归)

    如图一样的迷宫,红色部分代表有障碍物,老鼠从(1,1)坐标开始出发,坐标(6,5)代表迷宫出口,求出老鼠的逃离路径. /*老鼠出迷宫问题*/ public class P225MiGong {//先用 ...

  4. java实现老鼠出迷宫

    如图一只小老鼠从起点通过一些障碍到达终点,四周的墙壁不能通行,求通过计算得出迷宫路径,使老鼠成功逃出迷宫 算法设计 ①分而治之思想: 首先将老鼠出迷宫问题分成两部分求解,第一,迷宫的设计,第二,迷宫的 ...

  5. 递归回溯——老鼠出迷宫

    目录 前言 设计思路 绘制地图 寻找出路 绘制路线 总结 前言 这是一道关于递归回溯的经典题目,在布下障碍的迷宫中,为老鼠朋友找到一条可以逃出困境的路线,本文将为大家详细讲解如何运行递归的方法让老鼠走 ...

  6. Java-老鼠出迷宫(递归)

    文章目录 问题描述 一.解题思想 二.编写代码 1.创建迷宫 2.写出findway方法 3.整体代码测试如下 三.总结 问题描述 一只小老鼠从起点通过一些障碍到达终点,四周的墙壁不能通行,请设计出迷 ...

  7. 萌新卷妹带你逃出算法无名岛第五站

    萌新卷妹带你逃出算法无名岛第五站

  8. 萌新卷妹带你逃出算法无名岛第六站

    萌新卷妹带你逃出算法无名岛第六站

  9. 【NOI】6264:走出迷宫/ 2.5基本算法之搜索

    6264:走出迷宫 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会 ...

最新文章

  1. 对 Python 开发者而言,IPython 仍然是 Jupyter Notebook 的核心
  2. 未来3大趋势:人工智能 产业互联网 大数据与算法
  3. oracle触发器修改同一张表,oracle触发器中对同一张表进行更新再查询时,需加自制事务...
  4. MySQL查询出2门及2门以上不及格者的平均成绩
  5. Mac 录制视频,并转为GIF格式
  6. Vue3学习笔记- NPM包管理工具
  7. php restful 认证,Yii2.0 RESTful API 认证教程
  8. Android学习笔记(一)——控件布局常用属性
  9. HBASE学习笔记--概述
  10. springboot1.5 和 2.0 引入 redis 并封装工具类
  11. 安装unity3d多个版本共存
  12. Java后端实战项目推荐-尚医通
  13. django rest framework serializer 增加自定义字段
  14. sql数据库可以创建同义词_如何使用同义词简化SQL Server数据库对象的使用
  15. VMware克隆虚拟机后修改UUID、MAC地址、IP和主机名
  16. +new Date是什么意思?
  17. outlook企业邮箱服务器要多少钱,如何用OUTLOOK使用企业邮箱
  18. jquery 遍历父元素、子元素、兄弟元素
  19. 抖音SEO优化源码,企业号搜索排名系统,技术理论分析搭建。
  20. 【特征工程概要】解释什么是特征,特征工程的步骤

热门文章

  1. 小型计算机系统接口是什么,小型计算机系统接口是什么
  2. 变美丽——XP模拟Vista终极攻略
  3. 中成药数据图谱可视化与知识问答平台研究
  4. show partitions 分区查询
  5. 华为数据通信的“全联接”谋略:支撑千行百业数字化转型
  6. verycd 动态标题收藏
  7. P1010 幂次方 【分治递归】
  8. win7网络找不到服务器,Win7找不到服务器或DNS错误的解决方法
  9. 利用SpiderMonkey进行嵌入式开发——学习总结
  10. 笔记本出厂预装Win8改装Win7的操作步骤及常见问题