queue爆了
查看原帖
queue爆了
444267
cui_can楼主2021/7/22 10:25

WA+TLE 估计是queue爆了,求解惑

和很多AC代码相似

#include<bits/stdc++.h>
using namespace std;
const int N = 305;
struct node{
	int x,y,step;
};
int n,m,_sx,_sy;
char mp[N][N];
bool visit[N][N];
int dx[]={-1,0,0,1};
int dy[]={0,-1,1,0};
queue<node>q; 
void _goto(int &_x,int &_y,char k){
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			if((i!=_x||j!=_y)&&mp[_x][_y]==mp[i][j]){
				_x=i,_y=j;
				return;
			}
		}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			scanf(" %c",&mp[i][j]);
			if(mp[i][j]=='@')
				_sx=i,_sy=j;
		}
	q.push((node){_sx,_sy,0});
	while(q.size()){
		node t=q.front();
		q.pop();
		
		if(mp[t.x][t.y]=='='){
			cout<<t.step<<endl;
			return 0;
		}
		if(mp[t.x][t.y]>='A'&&mp[t.x][t.y]<='Z'){
			_goto(t.x,t.y,mp[t.x][t.y]);
		}
		for(int i=0;i<4;i++)
			int nx=t.x+dx[i],ny=t.y+dy[i];
			if(nx<1||nx>n||ny<1||ny>m||mp[nx][ny]=='#'||visit[nx][ny])continue;
			q.push((node){nx,ny,t.step+1});visit[t.x][t.y]=1;
		}
	}		
	return 0;
} 
2021/7/22 10:25
加载中...