TLE求助
  • 板块P1141 01迷宫
  • 楼主00000110hh
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/12/29 00:04
  • 上次更新2023/10/28 13:25:29
查看原帖
TLE求助
577581
00000110hh楼主2021/12/29 00:04
#include<bits/stdc++.h>
using namespace std;
int m,n;
struct aa{
	int mi;
	int mj;
	int ans;
}a[1000005];
struct o{
	int ii;
	int jj;
}old[100000];
int num;
int aann[1005][1005];
char mmap[1005][1005];
bool vis[1005][1005]; 
queue<int> qi,qj;
int mx[4]={-1,0,1,0};
int my[4]={0,1,0,-1};
void bfs(int p){
	while(!qi.empty()&&!qj.empty()){
		int xx=qi.front();
		int yy=qj.front();
		qi.pop();
		qj.pop();
		num++;
		old[num].ii=xx;
		old[num].jj=yy;
		if(mmap[xx][yy]=='1'){
			for(int i=0;i<=3;i++){
				if(mmap[xx+mx[i]][yy+my[i]]=='0'&&!vis[xx+mx[i]][yy+my[i]]){
					a[p].ans++;
					qi.push(xx+mx[i]);
					qj.push(yy+my[i]);
					vis[xx+mx[i]][yy+my[i]]=1;
				}
			}
		}
		else if(mmap[xx][yy]=='0'){
			for(int i=0;i<=3;i++){
				if(mmap[xx+mx[i]][yy+my[i]]=='1'&&!vis[xx+mx[i]][yy+my[i]]){
					a[p].ans++;
					qi.push(xx+mx[i]);
					qj.push(yy+my[i]);
					vis[xx+mx[i]][yy+my[i]]=1;
				}
			}
		}
		
	}
	for(int i=1;i<=num;i++){
		aann[old[i].ii][old[i].jj]=a[p].ans;
	}
	num=0;
}

int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>mmap[i][j];
		}
	}//输入n的地图 
	for(int i=1;i<=m;i++){
		cin>>a[i].mi>>a[i].mj;
	}//m个询问点 
	for(int i=1;i<=m;i++){
		if(aann[a[i].mi][a[i].mj]!=0){
			a[i].ans=aann[a[i].mi][a[i].mj];
		}
		else{
			vis[a[i].mi][a[i].mj]=1;
			qi.push(a[i].mi);
			qj.push(a[i].mj);
			bfs(i);
			memset(vis,0,sizeof(vis));
		}
	}
	for(int i=1;i<=m;i++){
		cout<<a[i].ans+1<<endl;
	}
	return 0;
} 
2021/12/29 00:04
加载中...