使用了记忆化,却多RE了2点,求助!
  • 板块P1141 01迷宫
  • 楼主cui_can
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/7/19 17:05
  • 上次更新2023/11/4 14:09:34
查看原帖
使用了记忆化,却多RE了2点,求助!
444267
cui_can楼主2021/7/19 17:05
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,answer,tot;
char mp[1005][1005];
bool visit[1005][1005];
int _ans[1005][1005];
int _x[1005][2];
int dx[]={-1,0,0,1};
int dy[]={0,-1,1,0};
struct node{
	int x,y;
};
queue<node>q;
int main(){
	freopen("in.txt","r",stdin); 
	freopen("out.txt","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%s",mp[i]+1);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			_ans[i][j]=1e9;
	while(m--){
		answer=1,tot=0;
		scanf("%d%d",&x,&y);
		if(_ans[x][y]!=1e9){
			cout<<_ans[x][y]<<endl;
			continue;
		}
		node p;p.x=x,p.y=y;
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				visit[i][j]=0;
		visit[x][y]=1;
		if(!q.empty())q.pop();
		q.push(p);
		while(q.size()){
			node t=q.front();
			q.pop();
			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>n||mp[t.x][t.y]==mp[nx][ny]||visit[nx][ny]==1)continue;
				answer++;visit[nx][ny]=1;
				node w;w.x=nx,w.y=ny;
				_x[tot][0]=x,_x[tot++][1]=y;
				q.push(w); 
			} 
		}
		for(int i=0;i<tot;i++)
			_ans[_x[i][0]][_x[i][1]]=answer;
		printf("%d\n",answer);
	}
	return 0;
}
2021/7/19 17:05
加载中...