題目鏈接:http://codeforces.com/problemset/problem/540/C
題目大意:給你一個地圖,有x 和 . ,x踩上去會碎,.踩上去會變成x,給出起點和終點,問能不能走到終點,且終點時終點的x碎掉;
一道bfs的題目;
代碼如下:
#include<bits/stdc++.h>
using namespace std;
char mapp[510][510];
int dir[4][2]= {1,0,-1,0,0,1,0,-1};
int kx,ky,ex,ey;
int n,m;
int ok(int x,int y)
{
if(x<1||x>n||y<1||y>m)
return 0;
else
return 1;
}
struct point
{
int x;
int y;
};
int BFS(int ksx,int ksy)
{
queue<point>q;
point sta,en,now,nown;
en.x=ex;
en.y=ey;
sta.x=ksx;
sta.y=ksy;
q.push(sta);
while(!q.empty())
{
now=q.front();
q.pop();
for(int i=0; i<4; i++)
{
nown.x=now.x+dir[i][0];
nown.y=now.y+dir[i][1];
if(ok(nown.x,nown.y))
{
if(nown.x==ex&&nown.y==ey)
{
if(mapp[nown.x][nown.y]=='.')
mapp[nown.x][nown.y]='X';
else
return 1;
q.push(nown);
}
else if(mapp[nown.x][nown.y]=='.')
{
mapp[nown.x][nown.y]='X';
q.push(nown);
}
}
}
}
return 0;
}
int main()
{
cin>>n>>m;
for(int i=1; i<=n; i++)
scanf("%s",mapp[i]+1);
cin>>kx>>ky>>ex>>ey;
if(BFS(kx,ky))
printf("YES\n");
else
printf("NO\n");
}