40分求调
  • 板块P1141 01迷宫
  • 楼主weizhenkai
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/13 22:05
  • 上次更新2024/11/14 02:30:46
查看原帖
40分求调
1086604
weizhenkai楼主2024/11/13 22:05
#include<bits/stdc++.h>
using namespace std;
struct node{
	int p,q;
};
queue< node > que;
vector< int > v[1000][1000];
int n,m,a[1000][1000],xx,yy,cnt,vis[1000][1000],b[1000][1000];
int d[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void bfs(int x,int y)
{
	v[x][y].push_back(x*1001+y);
	node s;
	s.p=x;s.q=y;
	que.push(s);
	while(!que.empty())
	{
		cnt++;
		node nn;
		nn=que.front();que.pop();
		for(int i=0;i<=3;i++)
		{
			node nxt=nn;
			nxt.p+=d[i][0];
			nxt.q+=d[i][1];
			if(vis[nxt.p][nxt.q]==1||nxt.p<1||nxt.p>n||nxt.q<1||nxt.q>n)continue;
			if(a[nxt.p][nxt.q]==a[nn.p][nn.q])continue;
			que.push(nxt);
			v[x][y].push_back(nxt.p*1001+nxt.q);
			vis[nxt.p][nxt.q]=1;
		}
	}
}
void he(int x,int y)
{
	b[x][y]=v[x][y].size()-1;
	for(int i=1;i<=v[x][y].size()-1;i++)
	{
		b[v[x][y][i]/1001][v[x][y][i]%1001]=v[x][y].size()-1;
	}
} 
int main()
{
	memset(a,0,sizeof(a));
	memset(vis,0,sizeof(vis));
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			scanf("%1d",&a[i][j]);
		}
	}
	while(m--)
	{
		cin>>xx>>yy;
		if(b[xx][yy]==0){bfs(xx,yy);he(xx,yy);}
		cout<<b[xx][yy]<<endl;
	}
	return 0;
}
2024/11/13 22:05
加载中...