TLE零分BFS求dalao指导
  • 板块P1141 01迷宫
  • 楼主wuxikai
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/9/25 17:01
  • 上次更新2024/9/25 20:05:43
查看原帖
TLE零分BFS求dalao指导
920211
wuxikai楼主2024/9/25 17:01

好像卡死了

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+7;
char mp[N][N];
int vis[N][N],cnt[N*N],dx[]={0,0,-1,1},dy[]={1,-1,0,0},n;
int H;
void bfs(int x,int y){
	H++;
	queue<pair<int,int>> q;
	q.push({x,y});
	vis[x][y]=H;
	while(!q.empty()){
		int tx=q.front().first;
		int ty=q.front().second;
		vis[tx][ty]=H;
		int color;
		if(mp[tx][ty]=='1') color=1;
		else color=0;
		for(int i=0;i<4;i++){
			int dxx=x+dx[i];
			int dyy=y+dy[i];
			if(dxx<1||dxx>n||dyy<1||dyy>n||vis[x][y]==H||mp[dxx][dyy]==color){
				continue;
			}
			vis[x][y]=H;
			q.push({x,y});
		}
	}
}
int main()
{
	int q;
	cin >> n >> q;
	for(int i=1;i<=n;i++){
		string s;
		cin >> s;
		int len=s.length();
		s="%"+s;
		for(int j=1;j<=len;j++){
			mp[i][j]=s[j];
		}
	}
	/*
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout << mp[i][j];
		}
		cout << '\n';
	}
	*/
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(vis[i][j]==0){
				bfs(i,j);
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cnt[vis[i][j]]++;
		}
	}
	while(q--){
		int x,y;
		cin >> x >> y;
		cout << cnt[vis[x][y]] << '\n';
	}
}
2024/9/25 17:01
加载中...