C++基于控制台的迷宫实现(下)
来源:互联网 发布:上海招聘seo引擎优化 编辑:程序博客网 时间:2024/06/06 20:24
3.2.7 获取未走过的方向的“下一个点”
如果某些方向的“下一个点”已经走过且是“断路”,此时要取另外方向的“下一个点”进行判断。实现该功能的函数是getNext,该函数的参数是“当前站立点”,返回值是未走过的方向的“下一个点”。
MStackElem getNext(MStackElem cur) {MStackElem next;next.x = next.y = next.val = -1;if (getEast(cur).val != 0 && unPass(path, getEast(cur))) {next = getEast(cur);}else if (getSouth(cur).val != 0 && unPass(path, getSouth(cur))) {next = getSouth(cur);}else if (getWest(cur).val != 0 && unPass(path, getWest(cur))) {next = getWest(cur);}else if (getNorth(cur).val != 0 && unPass(path, getNorth(cur))) {next = getNorth(cur);}return next;}
“当前站立点”有四个方向,其中,getEast()函数获取右方的点;getSouth()获取下方的点;getWest()获取左方的点;getNorth()获取上方的点。如果四个方向的“下一个点”都已经走过,或者都是墙,则返回的点的横纵坐标和值都是-1。
3.2.8 获取迷宫的路径
通过getMazePath()函数获取迷宫路径。
int getMazePath() {MStackElem start, end, cur;start.x = 0;start.y = 0;start.val = maze[start.x][start.y];end.x = 7;end.y = 7;end.val = maze[end.x][end.y]; cur = start;do{if (unPass(path, cur)) {//如果当前位置未曾走到过push(&realPath, cur);push(&path, cur);cur = getNext(cur);if (cur.x == end.x && cur.y == end.y) { //终点push(&realPath, cur);push(&path, cur);return true;}else if (cur.val == -1) {//断路pop(&realPath);cur = getTop(&realPath);//令cur指向栈顶元素}}else {//如果当前位置已经走过,说明原来测试的方向不对,现在尝试其它方向cur = getNext(cur);if (cur.val == -1) {//断路pop(&realPath);cur = getTop(&realPath);}}} while (cur.x != end.x || cur.y != end.y);}
其中,realPath和path都是“3.2.1路径的表示”中提到的路径对象;其中path表示已经在迷宫中做过的路径,包含所有走过的点,当判断当前点有没有走过时,就要使用该路径;realPath表示迷宫的有效路径,程序最后输出的是该路径中点。
3.2.9 显示迷宫路径
通过printMazePath()函数实现路径迷宫的显示,该函数的参数是迷宫的有效路径。
void printMazePath(MStack *s) {while (s->base < (s->top - 1)) {e = *(s->base); printf("(%d,%d)→", e.x + 1, e.y + 1);(s->base)++;}e = *(s->base);printf("(%d,%d)", e.x + 1, e.y + 1);}
通过while语句遍历有效路径中的所有点,并显示出来。
3.3 主函数
main()函数中的代码如下所示
initStack(&realPath);initStack(&path);getMazePath();printf("迷宫的路径是:\n\n");printMazePath(&realPath);
阅读全文
0 0
- C++基于控制台的迷宫实现(下)
- C++基于控制台的迷宫实现(上)
- C++基于控制台的迷宫实现(中)
- 基于Win32控制台的万年历的实现(下)
- 求win32下的多线程控制台程序(c实现)
- 迷宫的实现--c语言
- 基于Win32控制台的万年历的实现(上)
- 基于sqlite3实现的简单通讯录程序(控制台)
- 基于sqlite3实现的简单通讯录程序(控制台)
- 迷宫求解问题的简易实现(C++)
- 栈的引用--迷宫算法(c语言实现)
- VC++下实现2048总结(基于控制台和对话框两个程序)
- 嵌入式 linux 下 通用 console(控制台) 的实现
- 嵌入式 linux 下 通用 console(控制台) 的实现
- 迷宫算法(c语言实现)
- 堆栈实现迷宫出路(C语言)
- C语言 迷宫(栈实现)
- 迷宫问题 C语言实现(深搜)
- Intellij Idea中maven项目代码报错:Usage of API documented as @since 1.8+
- ASP.NET MongoDB数据库操作类
- Android Audio System
- vs2017打包安卓项目
- Java垃圾回收机制--java GC
- C++基于控制台的迷宫实现(下)
- python测试代码报错:Ran 0 test in 0.00s
- (树状数组)hdu1556 Color the ball(区间更新,单点查询)
- UrhoSharp Android入门
- 【关于适配】PopupWindow弹出时背景不变暗 或者 PopupWindow背景一闪一闪问题处理
- 集合之List
- git rebase
- python入门(一):变量及存储
- 一个集合选奇数个和偶数个情况研究