dfs TLE 70求助
  • 板块P1141 01迷宫
  • 楼主waioi_lin
  • 当前回复21
  • 已保存回复21
  • 发布时间2022/10/3 21:31
  • 上次更新2023/10/27 08:57:40
查看原帖
dfs TLE 70求助
567642
waioi_lin楼主2022/10/3 21:31
#include "bits/stdc++.h"
using namespace std;

int a[1005][1005], b[1005][1005], ans, n, m;

void dfs(int x, int y)
{
	if(x>=1 && x<=n && y>=1 && y<=n)
	{
		if(!b[x][y])
			ans++, b[x][y]=1;
		if(!a[x][y])
		{
			if(a[x-1][y]==1 && !b[x-1][y])
				dfs(x-1,y);
			if(a[x+1][y]==1 && !b[x+1][y])
				dfs(x+1,y);
			if(a[x][y-1]==1 && !b[x][y-1])
				dfs(x,y-1);
			if(a[x][y+1]==1 && !b[x][y+1])
				dfs(x,y+1);
		}else
		{
			if(a[x-1][y]==0 && !b[x-1][y])
				dfs(x-1,y);
			if(a[x+1][y]==0 && !b[x+1][y])
				dfs(x+1,y);
			if(a[x][y-1]==0 && !b[x][y-1])
				dfs(x,y-1);
			if(a[x][y+1]==0 && !b[x][y+1])
				dfs(x,y+1);
		}
	}
}

int main()
{
	scanf("%d %d", &n, &m);
	memset(a,-1,sizeof a);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			scanf("%1d", &a[i][j]);
	int x, y;
	while(m--)
	{
		scanf("%d %d", &x, &y);
		ans=0;
		dfs(x,y);
		printf("%d\n", ans);
		memset(b,0,sizeof b);
	}
	return 0;
}
2022/10/3 21:31
加载中...