【C++】迷宫的简单实现
2017-11-16 23:09
337 查看
写一个简单的迷宫
迷宫首先要有地图,我们的地图用一个二维数组表示
![](https://img-blog.csdn.net/20171116231109486)
这个地图很简单,当为1时表示可以走通,当为0时表示走不通
代码实现思路:
1.送一个能走的起始点
2.创建一个栈,每走一步,把走的位置压入栈中
3.当四个方向都走不通时,出栈一次,返回上一个位置,并把不通的路标记为4,走过的路标记为2.
4.当走出数组且不是起始位置,则该迷宫可走通。
代码:
(1)迷宫中走的方式
(2)给出迷宫并给出起始点
迷宫首先要有地图,我们的地图用一个二维数组表示
这个地图很简单,当为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++实现简单的走迷宫
- c++ 虚函数实现原理简单剖析
- C++简单集合类的实现方法
- C++实现简单的二叉树与二叉排序树
- C++实现简单的线程池
- socket简单实现ftp的文件传送(C++V2.0版,解决数据丢失问题)
- C++如何简单的实现内存池
- Windows Phone 8 学习志(探索问题一:如何简单利用Windows Phone Runtime Component项目类型实现C#和C++交互)
- c++智能指针的原理与简单实现
- C++简单实现string类
- 二叉树的简单操作(c++实现)
- binder 一个简单的c++服务的实现,与callback实现
- 《统计学习方法》+感知机+C++代码(简单)实现
- C++智能指针及其简单实现
- 设计模式之简单工厂模式:c++实现
- 一个简单二叉树的C++实现(一)
- 简单的加密与解密的实现---仿射密码(c++使用string)
- c++实现简单的线程池
- 游戏中按概率播放某个音效简单c++实现
- C++ 简单实现HTTP GET/POST 请求