【C++】迷宫的简单实现
写一个简单的迷宫
迷宫首先要有地图,我们的地图用一个二维数组表示
这个地图很简单,当为1时表示可以走通,当为0时表示走不通
代码实现思路:
1.送一个能走的起始点
2.创建一个栈,每走一步,把走的位置压入栈中
3.当四个方向都走不通时,出栈一次,返回上一个位置,并把不通的路标记为4,走过的路标记为2.
4.当走出数组且不是起始位置,则该迷宫可走通。
代码:
(1)迷宫中走的方式
#include<iostream>
#include<assert.h>
#include<stack>
using namespace std;
#define ROW 10
#define COL 10
struct Seat
{Seat(int x,int y):_x(x),_y(y){ }int _x;int _y;
};class Maze
{
public:Maze(int map[ROW][COL]){assert(map);for (int i = 0; i < ROW;i++)for (int j = 0; j < COL; j++){_map[i][j] = map[i][j];}}void Point(){for (int i = 0; i < ROW; i++){for (int j = 0; j < COL; j++)cout << _map[i][j] << " ";cout << endl;}cout << endl;}bool Ispass(Seat s){if (Exit(s)){return true;}if (_map[s._x][s._y]==1)return true;return false;}bool Exit(Seat e){if (e._x<0||e._x>=ROW||e._y<0||e._y>=COL)return true;return false;}bool PlayMaze(Seat enter){stack<Seat> SeatStack;if (!Ispass(enter)){cout << "入口错误" << endl;return false;}_map[enter._x][enter._y] = 2;SeatStack.push(enter);while (!SeatStack.empty()){Seat ret=SeatStack.top();if (Exit(ret))return true;_map[ret._x][ret._y] = 2;Seat up(ret); //向上up._x -= 1;if (Ispass(up)){SeatStack.push(up);continue;}Seat left(ret); //向左left._y -= 1;if (Ispass(left)){SeatStack.push(left);continue;}Seat right(ret); //向右right._y += 1;if (Ispass(right)){SeatStack.push(right);continue;}Seat down(ret); //向下down._x += 1;if (Ispass(down)){SeatStack.push(down);continue;}_map[ret._x][ret._y] = 4;SeatStack.pop();}}private:int _map[ROW][COL];
};
(2)给出迷宫并给出起始点
int main()
{int mapArr[ROW][COL] = {{ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },{ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },{ 0, 0, 1, 1, 1, 0, 0, 0, 0, 0 },{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },{ 0, 0, 0, 0, 1, 0, 1, 0, 0, 0 },{ 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 },{ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },{ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },{ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } };Maze m1(mapArr);m1.Point();m1.PlayMaze(Seat(9,6));m1.Point();system("pause");return 0;
}
【C++】迷宫的简单实现相关推荐
- 量子计算机迷宫,一个简单的例子,带你读懂量子计算机
原标题:一个简单的例子,带你读懂量子计算机 量子计算机和你的笔记本电脑在本质上是一样的,使用的都是二进制编码.计算机语言只用0和1来表达,这被称为"位",是计算机信息量最小的单位. ...
- java最简单的并查集(不想交集合)以及杭电1272
并查集要有的一些属性:value:表示当前值,指针:(不一定是指针)指向父节点. 还有一个属性number:表示该树存在的总个数.(也可以用深度表示).我用小树插在大树上. 如果是普通数字表示的树,可 ...
- 数据结构迷宫代码_数据结构课程设计——迷宫求解(二)
前言 接上文的介绍,本文将主要介绍如何生成随机迷宫,在网上找到的资源也比较多,这里我选取了随机 Prim 算法生成迷宫,选择这个算法的理由如下: 算法思想简单,易于实现 生成的迷宫比较自然,不会出现明 ...
- java动画迷宫寻路_[人工智能] 迷宫生成、寻路及可视化动画
前言 数据结构准备 迷宫生成算法 迷宫寻路算法 前言 本次带来迷宫相关的算法,迷宫的算法涉及到不少经典的图论算法,在游戏中NPC这些算法被大量的运用,深入了解和学习这些算法是为开发游戏打下坚实的基础. ...
- puzzle(0131)《迷宫》
目录 一,普通迷宫 1,普通迷宫的尝试法 2,尝试法的本质(选读) 3,尝试法的优劣 4,岔路标记法 二,带圈迷宫 三,普通迷宫的另类搜索算法(选读) 最近给8岁的娃买了本复杂迷宫的图书,发现通过微信 ...
- Python——迷宫生成和迷宫破解算法
迷宫绘制函数 def draw(num_rows, num_cols, m):image = np.zeros((num_rows * 10, num_cols * 10), dtype=np.uin ...
- 使用深度优先搜索算法解决迷宫问题
英文 | https://bytefish.medium.com/use-depth-first-search-algorithm-to-solve-a-maze-ae47758d48e7 翻译 | ...
- 用Qt写一个迷宫游戏
用Qt写一个迷宫游戏 一段时间以前,我用c写了个使用随机数生成迷宫的代码,现在在自学学Qt,于是就想到了利用这个代码改一个小游戏. 现在记录一下自己的学习过程,也算抛砖引玉,各位看官请多指教. 话不多 ...
- poj迷宫游戏c语言代码,ACM/ICPC 之 BFS-简单障碍迷宫问题(POJ2935)
题目确实简单,思路很容易出来,难点在于障碍的记录,是BFS迷宫问题中很经典的题目了. POJ2935-Basic Wall Maze 题意:6*6棋盘,有三堵墙,求从给定初始点到给定终点的最短路,输出 ...
最新文章
- 在ASP.NET中自动给URL地址加上超链接
- APPium连接真机输入框中输入的内容与代码中不一致
- 黑科技:CSS定制多行省略
- 一步一步解决 kernel 2.6 usb host driver
- server如何调用 thrift_一文带你了解 Thrift,一个可伸缩的跨语言 RPC 框架(pinpoint 源码分析系列)...
- Linux的Nginx五:进程|过程
- Let‘s Fluent:更顺滑的MyBatis
- 2015-12-01 视图
- 学JAVA的为什么_为什么学习Java的人越来越多
- Android Studio3.0,在原有项目中进行ndk配置
- 禁用“微软 Windows 10 易升”
- Pygame教程系列一:快速入门篇
- deepin系统维护(系统扩容)deepin live
- 隐马尔科夫模型(HMM)等文章记录
- 汇编——32位汇编基础框架
- CTP: SimNow , 策略模拟交易利器,赞!
- Oracle EBS R12开发工具安装
- Facebook的Libra “区块链”到底是如何运作的?
- 股市学习稳扎稳打(六)股票上龙虎榜有哪些条件
- [Axis2]org.apache.axiom.om.NodeUnavailableException