BFS TLE求调【玄关】
  • 板块P1141 01迷宫
  • 楼主small_moon
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/28 15:23
  • 上次更新2024/7/28 16:47:56
查看原帖
BFS TLE求调【玄关】
1115392
small_moon楼主2024/7/28 15:23
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int read();
int n,m;
bool flag[N][N];
int dp[N][N];
int dx[5]={0,-1,1,0,0},
	dy[5]={0,0,0,-1,1};
char g[N][N];
struct Node{
	int x,y;
}q[N*N];
void bfs(int x,int y)
{
	bool vis[N][N]={};
	int head=1,tail=1;
	q[1]={x,y}; vis[x][y]=1;
	while(head<=tail)
	{
		Node k=q[head]; head++;
		for(int i=1;i<=4;i++)
		{
			int xx=k.x+dx[i],yy=k.y+dy[i];
			if(xx<=n && xx>0 && yy<=n && yy>0 && !vis[xx][yy] && g[xx][yy]!=g[k.x][k.y])
			{
				q[++tail]={xx,yy};
				vis[xx][yy]=1;
				flag[xx][yy]=1;
			}
		}
	}
	for(int i=1;i<=tail;i++)
		dp[q[i].x][q[i].y]=tail;
}
int main()
{
	n=read(); m=read();
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>g[i][j];
	for(int i=1;i<=m;i++)
	{
		int x=read(),y=read();
		if(!flag[x][y]) bfs(x,y);
		cout<<dp[x][y]<<endl;
	}
	return 0;
}
int read()
{
	int x=0,f=1; char ch=getchar();
	while(ch<'0' || ch>'9')
	{
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0' && ch<='9')
	{
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	return x*f;
}
2024/7/28 15:23
加载中...