求助大佬或者小佬
查看原帖
求助大佬或者小佬
658786
STUDENT00楼主2022/8/30 21:53

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;
}
2022/8/30 21:53
加载中...