这是一道较为规整的BFS,代码有点长
Maze Master 题址
题目解释:就是有一个长为H,宽为W的二维表,全部都是’.‘或’#’。你任意从一个‘.’走到另一个’.’(不可以斜着),在所有的路中,最长的那条是多少?
宏观思路:在主函数中枚举每一组起、止点,记录下他们的行列坐标,以此来做宽搜。宽搜返回来的值,还要比一下max。
宽搜很好做,用queue队列就OK了
配合代码讲一下:
struct pos{
//结构体,行列号和步数(值)
int x;
int y;
int step;
};
pos make_pos(int a,int b,int c)
{
pos ret; //打包用的
ret.x=a;
ret.y=b;
ret.step=c;
return ret;
}
for(int i1=1;i1<=n;++i1) //枚举开头的行坐标
for(int j1=1;j1<=m;++j1)//枚举开头的列坐标
{
if(a[i1][j1]=='#')//如果当前格子是#,那就继续枚举
continue;
for(int i2=1;i2<=n;i2++) //枚举结尾的行坐标
for(int j2=1;j2<=m;j2++)//枚举结尾的列坐标
{
if(a[i2][j2]=='#')
continue;
if(i1==i2&&j1==j2)//如果开头和结尾是同一个点,那么重来
continue;
maxv=max(maxv,bfs(i1,j1,