代码部分如下
#include<bits/stdc++.h>
using namespace std;
char mp[100][100];
struct point //存放坐标
{
int x,y;
};
int x,y;
bool check(point z,int a,int b) //判断坐标合法
{
int xx = z.x+a;
int yy = z.y+b;
return (xx>=0 && xx<=x && yy>=0 && yy<=y && mp[xx][yy] != '#' );
}
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};//方向为四向
int main()
{
cin >> x >> y;
for(register int i=0;i<x;i++)
for(register int j=0;j<y;j++)
cin >> mp[i][j];
x--,y--;//我是从0开始计算 所以坐标-1才能达到这个点
queue<point>Q;
Q.push({0,0});//起点0,0
while (!Q.empty())
{
point u = Q.front();
if(u.x==x&&u.y==y)
{
cout << "Yes";
return 0;
}
Q.pop();
mp[u.x][u.y]='#';//当前位置标记障碍 这样下次不会再来
for(int i=0; i<4; i++)
{
if(check(u,dir[i][0],dir[i][1]))//判断合法
{
point v = u;
v.x+=dir[i][0];
v.y+=dir[i][1];
Q.push(v);
}
}
}
cout << "No"; //没有找到输出
return 0;
}
因为BFS这快学的不好 希望有大佬能提示一下!