WA和TLE(TLE是肯定的,但至于WA?)
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,m,q,ex,ey,sx,sy,tx,ty,dx[]={0,0,1,-1},dy[]={1,-1,0,0};
bool b[40][40],vis[35][35][35][35];
int read(){
char c=getchar();
while(c<'0'||c>'9') c=getchar();
int num=0;
while(c>='0'&&c<='9'){
num=num*10+c-'0';
c=getchar();
}
return num;
}
bool br(){
char c=getchar();
while(c!='0'&&c!='1') c=getchar();
return c-'0';
}
struct node{
int x,y,hx,hy,s;
};
queue<node> qt;
int main(){
n=read();
m=read();
q=read();
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) b[i][j]=br();
while(q--){
ex=read();
ey=read();
sx=read();
sy=read();
tx=read();
ty=read();
if(sx==sy&&ex==ey){
printf("0\n");
continue;
}
memset(vis,0,sizeof(vis));
vis[sx][sy][ex][ey]=1;
qt.push({sx,sy,ex,ey,0});
bool flag=1;
while(!qt.empty()&&flag){
node now=qt.front();
for(int i=0;i<4;i++){
int nx=now.hx+dx[i],ny=now.hy+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&b[nx][ny]){
if(nx==now.x&&ny==now.y){
if(now.hx==tx&&now.hy==ty){
printf("%d\n",now.s+1);
flag=0;
break;
}
if(!vis[now.hx][now.hy][nx][ny]){
vis[now.hx][now.hy][nx][ny]=1;
qt.push({now.hx,now.hy,nx,ny,now.s+1});
}
}else{
if(!vis[now.x][now.y][nx][ny]){
vis[now.x][now.y][nx][ny]=1;
qt.push({now.x,now.y,nx,ny,now.s+1});
}
}
}
}
qt.pop();
}
if(flag) printf("-1\n");
}
return 0;
}