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<
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。