【数据结构】 C++迷宫
来源:互联网 发布:听戏曲的软件 编辑:程序博客网 时间:2024/05/21 11:21
在日常的小游戏中,我们知道走迷宫的简要方法:
罗克说:“其实走迷宫可以不带线团,你按下面的三条规则去走,就能够走得进,也能够走得出”
第一条,进入迷宫后,可以任选一条道路往前走;
第二条,如果遇到走不通的死胡同,就马上返回,并在该路口做个记号;
第三条,如果遇到了叉路口,观察一下是否还有没有走过的通道。有,就任选一条通道往前走;没有,就顺着原路返回原来的叉路口,并做个记号。然后就重复第二条和第三条所说的走法,直到找到出口为止。如果要把迷宫所有地方都搜查到,还要加上一条,就是凡是没有做记号的通道都要走一遍。”
罗克说:“其实走迷宫可以不带线团,你按下面的三条规则去走,就能够走得进,也能够走得出”
第一条,进入迷宫后,可以任选一条道路往前走;
第二条,如果遇到走不通的死胡同,就马上返回,并在该路口做个记号;
第三条,如果遇到了叉路口,观察一下是否还有没有走过的通道。有,就任选一条通道往前走;没有,就顺着原路返回原来的叉路口,并做个记号。然后就重复第二条和第三条所说的走法,直到找到出口为止。如果要把迷宫所有地方都搜查到,还要加上一条,就是凡是没有做记号的通道都要走一遍。”
下面可以用代码实现简单的迷宫:
#include<iostream>#include<stack>#include<windows.h>//窗口using namespace std;struct seat{//构造函数seat(int x, int y):_x(x),_y(y){}int _x;int _y;};#define ROW 10#define COL 10class Maze{public: Maze(int map[ROW][COL]){for (int i = 0; i < ROW; i++){for (int j = 0; j < COL;j++){_map[i][j] = map[i][j];}}} //打印地图 void printmap() { for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) cout << _map[i][j] << " "; cout << endl; } }//private://int _map[COL][ROW];//};//检测入口是否为通道bool IsPass(const seat& s){ if (IsExit(s))return true;if (1 == _map[s._x][s._y])return true;return false;}//检测是否为出口bool IsExit(const seat& s){if (s._x<0||s._x>=ROW||s._y<0||s._y>=ROW)return true; return false;}//入口bool passMaze(seat& enter){if (!IsPass(enter)){cout << "入口非法" << endl;return false;}stack<seat> s;//栈操作s.push(enter);while (!s.empty()){system("cls"); //刷新对话框printmap();Sleep(1000);//每隔1秒执行一次//cout << endl;//fflush(stdout);//刷新输出流seat curpos = s.top();if (IsExit(curpos)){return true;}_map[curpos._x][curpos._y] = 2;//upseat up(curpos);up._x -= 1;if (IsPass(up)){s.push(up);continue;}//downseat down(curpos);down._x += 1;if (IsPass(down)){s.push(down);continue;}//leftseat left(curpos);left._y -= 1;if (IsPass(left)){s.push(left);continue;}//rightseat right(curpos);right._y += 1;if (IsPass(right)){s.push(right);continue;}//走错了_map[curpos._x][curpos._y] = 5;s.pop();}return false;}private:int _map[COL][ROW];};int main(){int mapArr[ROW][COL] = { {0,0,1,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,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} };Maze map(mapArr);map.printmap();cout << endl;if (map.passMaze(seat(9, 7))){cout << "走出来了" << endl;}/*map.printmap();*/system("pause");return 0;}
以上就是简单迷宫以C++的方式实现,部分注释已经在代码后面为大家给出,迷宫中主要用到了数据结构中栈的知识。动态升级版后面再做总结,有不足的地方欢迎大家提出!
阅读全文
0 0
- 数据结构-栈/c++/迷宫
- 数据结构(迷宫求解c++)
- 数据结构(C++) 栈-迷宫问题
- [C++]数据结构课程设计:迷宫老鼠1.0
- [C++]数据结构课程设计:迷宫老鼠1.0
- 数据结构:maze迷宫求解(C++)
- 数据结构 C语言 队列 迷宫问题
- 数据结构--迷宫
- 学习笔记------数据结构(C语言版)栈应用 迷宫寻路
- 数据结构——栈——迷宫(c++)
- (数据结构作业)用C语言写的一个迷宫
- 迷宫问题的通用解法C语言数据结构实现
- 数据结构 C语言 双向链栈 迷宫问题
- c语言版数据结构(奇迹冬瓜)-栈实战(1)栈解迷宫<迷宫算法>
- 迷宫(C++)
- 【C++】迷宫
- 数据结构实习:迷宫求解
- 迷宫MAZE(数据结构)
- 锤子剪刀布
- poj 3111 K Best 二分
- python 格式化字符串
- 尾插法建立链表分解
- 转载-总结sublime text3安装package control插件的方法
- 【数据结构】 C++迷宫
- Git的add、commit、push命令
- flask建站实践笔记001-基本结构
- 数据结构上机作业3-哈夫曼编码
- DSP:数字信号处理
- Linux系统和基本硬件知识
- 单位取平均分排榜
- mysql集群搭建
- java Eclipse