大B 在一个边长为 N 的正方形迷宫内。大A 想让你帮他算算,他最短可以在几个单位时间后获胜。
大A 把这个房间的地图用符号画了出来,他规定:
. 代表这个地方是没有障碍的。
*代表这个地方有障碍物,是不可走的。
A 代表大A的初始位置。
B 代表大B的初始位置。
#include <bits/stdc++.h>
using namespace std;
char a[1005][1005];
int b1[10005],b2[10005],fx[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
bool v[10005][10005];
int n,ax,t,ay,bx,by,s;
queue<int>qx,qy;
void f(){
int j;
qx.push(ax);
qy.push(ay);
a[ax][ay]=0;
v[ax][ay]=true;
if(j<=t)
while(!qx.empty()&&t>=0){
int x=qx.front(),y=qy.front();
qx.pop();
qy.pop();
if(j<=t){
bx=b1[j];
by=b2[j];
}
for(int i=0;i<4;i++){
int nx=x+fx[i][0];
int ny=y+fx[i][1];
if(a[nx][ny]!='*'&&nx<=n&&ny<=n&&!v[nx][ny]){
v[nx][ny]=true;
a[nx][ny]=a[x][y]+1;
qx.push(nx);
qy.push(ny);
s++;
}
}
}
cout<<s;
return;
}
int main(){
cin>>n>>t;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
if(a[i][j]=='A'){
ax=i;
ay=j;
}else if(a[i][j]=='B'){
bx=i;
by=j;
}
}
}
for(int i=1;i<=t;i++){
cin>>b1[i]>>b2[i];
}
f();
return 0;
}