80 T2个点求助大佬
  • 板块P1141 01迷宫
  • 楼主wh_1024
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/2/9 13:26
  • 上次更新2023/10/24 01:20:11
查看原帖
80 T2个点求助大佬
648053
wh_1024楼主2023/2/9 13:26
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
int n,m;
char g[N][N];
int d[N][N];
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
int res[N][N];
typedef pair<int,int> PII;
int bfs(int ix,int jy)
{
	int ans1=0;
	queue<PII> q;
	queue<PII> ans;
	q.push({ix,jy});
	memset(d,-1,sizeof d);
	d[ix][jy]=0;
	while(q.size())
	{
		ans1++;
		auto s=q.front();
		ans.push(s);
		q.pop();
		for(int i=0;i<4;i++)
		{
			int x = s.first+dx[i],y=s.second+dy[i];
			int num=(g[s.first][s.second]-'0' + g[x][y] - '0');
			if(x>0&&x<=n&&y>0&&y<=n&&d[x][y]==-1&&num==1)
			{
				d[x][y]=0;
				q.push({x,y});
			}
		}
	}
	while(ans.size())
	{
		auto a1 = ans.front();
		ans.pop();
		res[a1.first][a1.second]=ans1;
	}
}
int main(){
	ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		cin>>g[i][j];
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(!res[i][j])
			{
				bfs(i,j);
			}
		}
	}
	while(m--)
	{
		int i,j;
		scanf("%d%d",&i,&j);;
		printf("%d\n",res[i][j]);
	}
}
2023/2/9 13:26
加载中...