39分求助
查看原帖
39分求助
651775
lizhaoqi楼主2024/5/25 11:34
#include<bits/stdc++.h>
using namespace std;
int n,m,ans[305][305];
int dx[]={0,-1,0,1};
int dy[]={1,0,-1,0};
char c[305][305],door[305][305];
int sx,sy,tx,ty,cnt;
bool v[305][305];
queue<int> qx,qy;
void getdoor(int nx,int ny){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if((door[i][j]==door[nx][ny])&&(nx!=i||ny!=j)){
				ans[i][j]=ans[qx.front()][qy.front()]+1;
				qx.push(i),qy.push(j);
				return;
			}
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>c[i][j];
			if(c[i][j]>='A'&&c[i][j]<='Z'){
				door[i][j]=c[i][j];
			}
			if(c[i][j]=='@'){
				sx=i,sy=j;
			}
		}
	}
	qx.push(sx);
	qy.push(sy);
	while(!qx.empty()){
		for(int i=0;i<4;i++){
			tx=qx.front()+dx[i];
			ty=qy.front()+dy[i];
			if(door[tx][ty]){
				ans[tx][ty]=ans[qx.front()][qy.front()]+1;
				getdoor(tx,ty);
			}else if(tx>0&&tx<=n&&ty>0&&ty<=n&&v[tx][ty]==0&&c[tx][ty]!='#'){
				v[tx][ty]=1;
				ans[tx][ty]=ans[qx.front()][qy.front()]+1;
				if(c[tx][ty]=='='){
					cout<<ans[tx][ty];
					return 0;
				}
				qx.push(tx),qy.push(ty);
			}
		}
	qx.pop(),qy.pop();
	}
	return 0;
}

请给位大佬帮忙看一下哪里出了问题,谢谢!

(问题:WA/TLE)

2024/5/25 11:34
加载中...