80分bfs求助,TLE了
  • 板块P1141 01迷宫
  • 楼主mobaiawa
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/6/28 16:58
  • 上次更新2023/11/3 12:14:11
查看原帖
80分bfs求助,TLE了
754006
mobaiawa楼主2023/6/28 16:58
#include<bits/stdc++.h>
using namespace std;
int ix[4]={1,-1,0,0};
int iy[4]={0,0,1,-1};
	int i_,j_;
int map_[1010][1010],head,tail,n,m,tot,mp[1010][1010];
struct node{
	int x,y;
}mov[1000000];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			scanf("%1d",&map_[i][j]);
		}
	}
	for(int i=1;i<=m;i++){
		cin>>i_>>j_;
		if(mp[i_][j_]>0){
			cout<<mp[i_][j_]<<endl;
			continue;
		}
		memset(mov,0,sizeof mov);
		head=0;tail=0;tot=0;
		mov[++tail].x=i_;mov[tail].y=j_;
		mp[i_][j_]=1;
		while(tail>head){
			head++;tot++;
			for(int i=0;i<=3;i++){
				int tx=mov[head].x+ix[i];
				int ty=mov[head].y+iy[i];
				if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&mp[tx][ty]==0&&map_[mov[head].x][mov[head].y]+map_[tx][ty]==1){
					mp[tx][ty]=1;
					mov[++tail].x=tx,mov[tail].y=ty;
				}
			}
		}
		do{
			mp[mov[tail].x][mov[tail].y]=tot;
		}while(tail--);

		cout<<tot<<endl;
	}
	return 0;
}
2023/6/28 16:58
加载中...