【数据结构】迷宫(递归)
2017-08-19 15:28
232 查看
代码如下:
运行结果:
这样,一个简易的递归实现迷宫就完成了。
#include <iostream> #include <stack> using namespace std; #define MAX_ROW 10 //宏定义行 #define MAX_COL 10 //宏定义列 struct Seat { Seat(int x, int y) :_x(x) , _y(y) {} int _x; int _y; }; class Maze { public: Maze(int arr[][MAX_COL], int Row, int Col) { _map = new int*[MAX_ROW];//先开辟行的空间 for (int i = 0; i < MAX_ROW; ++i) { _map[i] = new int[MAX_COL];//再在每行开辟列的空间 for (int j = 0; j < MAX_COL; j++) { _map[i][j] = arr[i][j]; } } } void PrintMaze()//打印迷宫 { for (int i = 0; i < MAX_ROW; i++) { for (int j = 0; j < MAX_COL; j++) { cout << _map[i][j] << " "; } cout << endl; } cout << endl; } ~Maze() { for (int i = 0; i < MAX_COL; ++i)//先销毁每行中开辟的空间 { delete[] _map[i]; } delete _map; } bool IsPass(Seat s)//判断当前位置是否为通路 { if (1 == _map[s._x][s._y]) return true; if (s._x < 0 || s._x >= MAX_ROW || s._y < 0 || s._y >= MAX_COL)//出口 return true; return false; } bool PassMaze(Seat& s)//走迷宫 { if (s._x < 0 || s._x >= MAX_ROW || s._y < 0 || s._y >= MAX_COL)//防止数组越界 return true; // 是否为出口 if (IsPass(s))//若当前位置为通路 { _map[s._x][s._y] = 2;//标记当前走过的位置为2 //将当前位置前后左右坐标给出 Seat up(s._x - 1, s._y); Seat left(s._x, s._y - 1); Seat right(s._x, s._y + 1); Seat down(s._x + 1, s._y); if (PassMaze(up)) //朝上走 { _map[s._x][s._y] = 2; return true; } if (PassMaze(left)) //朝左走 { _map[s._x][s._y] = 2; return true; } if (PassMaze(right)) //朝右走 { _map[s._x][s._y] = 2; return true; } if (PassMaze(down)) //朝下走 { _map[s._x][s._y] = 2; return true; } _map[s._x][s._y] = 3;//若上下左右均走不通,则回退回来并且将原来位置标记为3,不再走这里 } return false; } private: int **_map; }; int main() { int MapArr[MAX_ROW][MAX_COL] = { { 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 }, { 1, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }; Maze maze(MapArr, MAX_ROW, MAX_COL); maze.PrintMaze(); Seat s(9, 6); //迷宫入口 maze.PassMaze(s); maze.PrintMaze(); return 0; }
运行结果:
这样,一个简易的递归实现迷宫就完成了。
相关文章推荐
- python数据结构学习笔记-2017-01-08-01-N皇后问题、迷宫问题和跳马问题的递归解决
- 数据结构4————递归解决迷宫问题和马踏棋盘
- 数据结构-->迷宫-->递归求解
- 数据结构 迷宫 C++源代码 非递归解法
- “第一次亲密接触”--数据结构,迷宫的生成、走通(非递归)
- 【数据结构】递归求解迷宫问题
- c++ 数据结构 用递归方法解决迷宫问题
- 数据结构---递归
- java递归解迷宫 求所有解
- 数据结构/实现二叉树的前序/中序/后序非递归遍历
- Python数据结构之二叉树(涵盖了构建、删除、查找、字典转换、非递归与递归遍历等)
- 《数据结构》(C语言版)——栈的应用举例-迷宫求解
- 数据结构学习之双向循环链表的基本操作(非递归实现)
- 16-数据结构_递归_汉诺塔-图解与实现
- 【数据结构】Java实现二叉树遍历(非递归)
- 数据结构学习13——递归运用
- 数据结构的应用------------迷宫求解
- 数据结构(java语言描述)递归实现——汉诺塔问题
- 数据结构学习笔记--(1)利用递归求N!
- [数据结构]Angle迷宫(纯裸BFS)