P1825 52分求助(其余的WA)
查看原帖
P1825 52分求助(其余的WA)
527059
suzihan123456楼主2022/7/30 11:02
#include <bits/stdc++.h>
using namespace std;
struct note{
	int x,y,s;
}que[160009];
struct a{
	int x1,y1,x2,y2,b;
}Z[109];
long long int B[309][309],N[4][2]={{1,0},{0,1},{-1,0},{0,-1}},head=1,tail=1,n,m,sx,sy,zx,zy,tx,ty,i,j,f,p;
char A[309][309];
int main(){
	cin>>n>>m;
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			cin>>A[i][j];
			if(A[i][j]=='@'){
				sx=i;
				sy=j;
			}else if(A[i][j]=='='){
				zx=i;
				zy=j;
			}else if(A[i][j]>='A'&&A[i][j]<='Z'){
				if(Z[A[i][j]-'0'].b==0){
					Z[A[i][j]-'0'].b=1;
					Z[A[i][j]-'0'].x1=i;
					Z[A[i][j]-'0'].y1=j;
				}else{
					Z[A[i][j]-'0'].x2=i;
					Z[A[i][j]-'0'].y2=j;
				}
			}
		}
	}
	B[sx][sy]=1;
	que[tail].x=sx;
	que[tail].y=sy;
	que[head].s=0;
	tail++;
	while(head<tail){
		for(i=0;i<8;i++){
			tx=que[head].x+N[i][0];
			ty=que[head].y+N[i][1];
			if(tx<1||tx>n||ty<1||ty>m){
				continue;
			}
			if(A[tx][ty]>='A'&&A[tx][ty]<='Z'){
				B[tx][ty]=1;
				f=1;
				if(tx==Z[A[tx][ty]-'0'].x1&&ty==Z[A[tx][ty]-'0'].y1){
					p=Z[A[tx][ty]-'0'].y2;
					tx=Z[A[tx][ty]-'0'].x2;
					ty=p;
				}else{
					p=Z[A[tx][ty]-'0'].y1;
					tx=Z[A[tx][ty]-'0'].x1;
					ty=p;
				}	
			}
			if(B[tx][ty]==0&&A[tx][ty]!='#'){
				if(f==1){
					f=0;
				}else{
					B[tx][ty]=1;	
				}
				que[tail].x=tx;
				que[tail].y=ty;
				que[tail].s=que[head].s+1;
				tail++;
				if(tx==zx&&ty==zy){
					cout<<que[tail-1].s;
					return 0;
				}
			}
		}
		head++;
	}
	return 0;
}
2022/7/30 11:02
加载中...