迷宫求解(栈实现)
来源:互联网 发布:windows视频放大缩小 编辑:程序博客网 时间:2024/06/07 23:49
迷宫求解(栈实现)
自己写的,外面别人的看了一下,感觉不少都是递归解决这类问题的,然后我尝试用非递归解决的。混合了类的运用,多说不如直接上代码了。
#include<iostream>#include<stdio.h>#include<stack>#define M 8using namespace std;struct Pos {int i;int j;};class Maze{ public: Maze()=default; Maze(int a1,int b1,int a2,int b2) { start_.i=a1; start_.j=b1; end_.i=a2; end_.j=b2; } ~Maze()=default; void CreateMaze(); void PrintMaze(); bool MakeIt(); private: int Ma_ze[M][M]; Pos start_; Pos end_;};void Maze::CreateMaze( ){ int i=0,j=0; int a=0; for (i=0;i<M;i++) { for (j=0;j<M;j++) { cin>>a; Ma_ze[i][j]=a; } } Ma_ze[start_.i][start_.j]=1;}void Maze::PrintMaze( ){ int i=0,j=0; for (i=0;i<M;i++) { for (j=0;j<M;j++) { if (Ma_ze[i][j]==2) { cout<<"●"; } else if(Ma_ze[i][j]==0) { cout<<" "; } else if (Ma_ze[i][j]==1) { cout<<"**"; } } cout<<endl; }}bool Maze::MakeIt()//完成路径寻找{ bool issuccess=false; stack <Pos> make; Pos alit,blit; make.push(start_); while (1) { if (make.empty()==true) { break; } alit=make.top(); //cout<<alit.i<<" "<<alit.j<<endl; //make.pop(); if (Ma_ze[alit.i+1][alit.j]==0) { blit.i=alit.i+1; blit.j=alit.j; Ma_ze[alit.i+1][alit.j]=1; if (blit.i==end_.i&&blit.j==end_.j) { issuccess=true; break; } make.push(blit); } else if (Ma_ze[alit.i][alit.j+1]==0) { blit.i=alit.i; blit.j=alit.j+1; Ma_ze[alit.i][alit.j+1]=1; if (blit.i==end_.i&&blit.j==end_.j) { issuccess=true; break; } make.push(blit); } else if (Ma_ze[alit.i-1][alit.j]==0) { blit.i=alit.i-1; blit.j=alit.j; Ma_ze[alit.i-1][alit.j]=1; if (blit.i==end_.i&&blit.j==end_.j) { issuccess=true; break; } make.push(blit); } else if (Ma_ze[alit.i][alit.j-1]==0) { blit.i=alit.i; blit.j=alit.j-1; Ma_ze[alit.i][alit.j-1]=1; if (blit.i==end_.i&&blit.j==end_.j) { issuccess=true; break; } make.push(blit); } else { make.pop(); } } return issuccess;}int main(){ Maze m(1,1,6,6); freopen("maze.txt","r",stdin); m.CreateMaze(); m.PrintMaze(); if (m.MakeIt()==true) { m.PrintMaze(); } else { cout<<"error"<<endl; }}
这是测试用的数据,“2”表示墙壁,“0”表示可以走。
2 2 2 2 2 2 2 2
2 0 0 2 0 2 0 2
2 2 0 0 0 0 0 2
2 0 0 2 0 2 0 2
2 2 2 2 0 2 0 2
2 2 0 0 0 2 0 2
2 0 0 2 0 0 0 2
2 2 2 2 2 2 2 2
反思就是代码还有很多可以写的更简洁的地方,比较懒想等到以后了。
0 0
- 迷宫求解(栈实现)
- 迷宫求解(栈实现)
- 迷宫问题求解(用栈实现)
- 迷宫求解(栈)
- 栈实现迷宫求解问题
- 应用栈求解迷宫问题(C++实现)
- 利用栈来实现“迷宫求解”
- 用栈和队列实现迷宫求解
- C++ 用栈实现 迷宫求解
- 利用栈实现迷宫的求解
- erl_stack_queue-利用栈实现迷宫的求解
- C++栈实现数据结构中的迷宫求解
- 用栈实现迷宫求解Maze
- 迷宫求解堆栈实现
- 递归实现迷宫求解
- 迷宫求解(C语言 栈)
- 栈---数组---迷宫求解
- 栈求解迷宫
- 324. Wiggle Sort II(难)
- 在阿里云Centos 7上安装mosquitto
- java中的集合
- 自定义控件入门1-paint与canvas常用的方法介绍
- JSON字符串转换为Map
- 迷宫求解(栈实现)
- 136. Single Number
- U3D开发学习之路--字符串的3个小练习
- Java I/O系统详解(一)——File类
- (学习)wget命令|应用:字符界面下载安装包
- 【web前端开发技术】深入理解JavaScript中的依赖注入
- java的压缩和解压demo
- iOS记录0822
- 【用膝盖写代码系列】(2):NOIP2011普及组复赛题目详解