迷宫(一)
样例输入1
3 4
S**.
..*.
***T
样例输出1
no
样例输入2
3 4
S**.
....
***T
样例输出2
yes
解题思路
这是一道典型又基础的广搜题,广搜一般就是用于状态表示比较简单、求最优策略的问题。就是进行一层一层的搜索,每一条路的搜索进度都是一样的,因此呢,要用到队列的知识!!
首先,第一步就是判断下一步是否能够通过,即判断当前位置是否超界、是否走过、是否为路。
int can(int x,int y)///判断能不能走能返回1不能返回0
{
///判断是否超界、是否走过、是否为路
if((x>=0&&x<n)&&(y>=0&&y<m)&&flag[x][y]==0&&maze[x][y]!='*')
{
return (1);
}
else
{
return (0);
}
}
然后,判断对列是否为空,不为空时进行下一步操作。取队首元素,判断该元素是否到达终点,如果到达终点输出“yes”,如果没有到达终点,按照下右上左(移动顺序可自己定义)的顺序进行搜索移动。移动到下一个位置时将该位置的元素入队。
void bfs(int sx,int sy)
{
node top;
top.x=sx;
top.y=sy;
queue<node>q;///queue<类型>名称
q.push(top);///从队首元素后