C++利用递归实现走迷宫
本文实例为大家分享了C++利用递归实现走迷宫的具体代码,供大家参考,具体内容如下
要求:
1、将地图的数组保存在文件中,从文件中读取行列数
2.、动态开辟空间保存地图
3.、运行结束后再地图上标出具体的走法
说明:
1、文件中第一行分别放置的是地图的行数和列数
2、其中1表示墙,即路不通,0表示路,即通路
3、程序运行结束后用2标记走过的路径
4、当走到“死胡同”时用3标记此路为死路
5、每到一个点,按照左上右下的顺序去试探
6、没有处理入口就是"死胡同"的极端情况
maze.h
#ifndef_MAZE_H_ #define_MAZE_H_ #include//ifstream #include #include #include usingnamespacestd; //坐标类 classSeat { public: Seat(int_x,int_y) :x(_x) ,y(_y) {} intx; inty; }; //迷宫类 classMaze { private: int**_map;//指向地图的指针 int_row;//存放地图的行数 int_col;//存放地图的列数 public: //构造函数读取文件里的地图和行数 Maze(conststring&filePath); private: //判断是否是路 boolIsPass(Seat&entry); public: //开始走 boolPassMaze(Seat&entry); //打印地图 voidPrintMap(); //析构释放空间 ~Maze(); }; #endif
maze.cpp
//递归实现迷宫 #include"maze.h" //判断是否是路 boolMaze::IsPass(Seat&Entry) { if(_map[Entry.x][Entry.y]==0) { returntrue; } returnfalse; } //构造函数读取文件里的地图和行数 Maze::Maze(conststring&filePath) { ifstreamread(filePath); stringstr_row_col,str_temp; //读取第一行 getline(read,str_row_col); //获取行 str_temp=str_row_col.substr(0,str_row_col.find_first_of(',')); _row=atoi(str_temp.c_str()); //获取列 str_temp=str_row_col.substr(str_row_col.find_first_of(',')+1); _col=atoi(str_temp.c_str()); //为地图分配空间 _map=newint*[_row]; for(intindex=0;index<_col;++index) { _map[index]=newint[_col]; } intindex_col=0; intindex_row=0; //填充地图 while(!read.eof()) { //获取一行 getline(read,str_temp); char*line=(char*)str_temp.c_str(); while((*line)!='\0') { if(*line=='0'||*line=='1') { _map[index_row][index_col++]=*line-'0'; } ++line; } ++index_row; index_col=0; } //关闭文件 read.close(); } //开始走 boolMaze::PassMaze(Seat&Entry) { //判断是否走到出口 if(Entry.x<0||Entry.y<0||Entry.y>=_row) { returntrue; } if(IsPass(Entry)) { //将走过的路置为2 _map[Entry.x][Entry.y]=2; //向左走 Seatleft(Entry.x,Entry.y-1); if(PassMaze(left))//递归调用 { returntrue; } //向上走 Seatup(Entry.x-1,Entry.y); if(PassMaze(up))//递归调用 { returntrue; } //向右走 Seatright(Entry.x,Entry.y+1); if(PassMaze(right))//递归调用 { returntrue; } //向下走 Seatdown(Entry.x+1,Entry.y); if(PassMaze(down)) { returntrue; } //走到此处说明是死路置为3 _map[Entry.x][Entry.y]=3; } returnfalse; } //打印地图 voidMaze::PrintMap() { for(introw=0;row<_row;++row) { for(intcol=0;col<_col;++col) { cout<<_map[row][col]<<""; } cout<以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。