TLE1个点就离谱
  • 板块P1141 01迷宫
  • 楼主Ruins
  • 当前回复5
  • 已保存回复5
  • 发布时间2020/12/17 23:39
  • 上次更新2023/11/5 06:00:38
查看原帖
TLE1个点就离谱
169611
Ruins楼主2020/12/17 23:39
#include <bits/stdc++.h>
using namespace std;
int n,m,ans[1001][1001];
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
bool M[1001][1001],flag[1001][1001];
struct Node{
	int x;
	int y;	
}G[1001*1001];
void BFS(int start_x,int start_y){
	int head=0,tail=0,sum_n=1,sum_s=1;
	memset(flag,0,sizeof(flag));
	G[tail++]={start_x,start_y};
	flag[start_x][start_y]=true;//① 
	while(head<tail){
		int sx=G[head].x,sy=G[head++].y;
		for(int i=0;i<4;i++){
			int x1=sx+dx[i];
			int y1=sy+dy[i];
			if(x1>n||x1<=0||y1>n||y1<=0||flag[x1][y1]==true||M[x1][y1]==M[sx][sy])continue;
			sum_n++;
			flag[x1][y1]=1;
			G[tail++]={x1,y1};
			sum_s++;
		}
	}
	for(int u=0;u<=tail-1;u++){
		ans[G[u].x][G[u].y]=sum_s;
	}
}
int main(){
	char x;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>x;
			if(x=='1'){
				M[i][j]=true;
			}
			else if(x=='0'){
				M[i][j]=false;
			}
		}
	}
	for(int o=1;o<=m;o++){
		int i,j;
		cin>>i>>j;
		if(ans[i][j]==0){
			BFS(i,j);
			cout<<ans[i][j]<<endl;
		}
		else cout<<ans[i][j]<<endl;
	}
	return 0;
}

有无大佬解释一下?

2020/12/17 23:39
加载中...