90分,谢谢
  • 板块P1141 01迷宫
  • 楼主m_m_m
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/5/8 18:54
  • 上次更新2023/10/23 16:20:08
查看原帖
90分,谢谢
481729
m_m_m楼主2023/5/8 18:54
#include<bits/stdc++.h>
using namespace std;
bool dt[1001][1001];
bool vis[1001][1001];
int pa[100002][2];
int n,m,l;
int ans[1001][1001];
int dfs(int nx,int ny,int last){
	if(nx>=1&&ny>=1&&nx<=n&&ny<=n&&vis[nx][ny]==0&&last!=dt[nx][ny])
	{
		l++;
		pa[l][0]=nx,pa[l][1]=ny;
		//cout<<nx<<" "<<ny<<endl;
		vis[nx][ny]=1;
		dfs(nx+1,ny,dt[nx][ny]);
		dfs(nx-1,ny,dt[nx][ny]);
		dfs(nx,ny+1,dt[nx][ny]);
		dfs(nx,ny-1,dt[nx][ny]);
	}
//	return l;
}
int main()
{	 ios::sync_with_stdio(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	for(int w=1;w<=n;w++)
	{
		char s;
		cin>>s;
		if(s=='1')dt[i][w]=1;
		else dt[i][w]=0;
	}
	int p1,p2;	
	for(int i=1;i<=m;i++){
	cin>>p1>>p2;
	if(vis[p1][p2]==0){
			l=0;
			dfs(p1,p2,-1);
		for(int o=1;o<=l;o++)
			ans[pa[o][0]][pa[o][1]]=l;
		}
		
	 cout<<ans[p1][p2]<<endl;
		
	}
	return 0;
	
}
2023/5/8 18:54
加载中...