求助!问题出在哪了
查看原帖
求助!问题出在哪了
873417
Istruggle楼主2022/12/22 14:35

搜索的部分好像卡住了

#include<bits/stdc++.h>
using namespace std;
int n,m,a[1005][1005];
const int d[8][2]={{-1,-1},{-1,0},{1,1},{0,1},{1,1},{1,0},{-1,1},{0,-1}};
int ans=0;
inline int read()
{
	int x=0,y=1;char c=getchar();
	while (c<'0'||c>'9') {if (c=='-') y=-1;c=getchar();}
	while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
	return x*y;
}
void dfs(int i,int j)
{
	if(a[i][j]==2) 
	{
		a[i][j]=3;return;
	}
	if(a[i][j]==0)
	{
			a[i][j]=4;
	    for(int k =0;k<=7;i++)
	    {
			dfs(i+d[k][0],j+d[k][1]);
     	}
	}
}
int main()
{
	n=read();m=read();
	for(int i =1;i<=n;i++)
	for(int j =1;j<=m;j++)
	a[i][j]=read();

	for(int i =1;i<=n;i++)
	for(int j =1;j<=m;j++)
	{
		if(a[i][j]==1)
		{
			for(int k =0;k<=7;k++)
			{
				a[i+d[k][0]][j+d[k][1]] = 2;
			}
		}
	}
	for(int i =1;i<=n;i++)
	for(int j =1;j<=m;j++)
	{
		if(a[i][j]==0)
		{
			ans++;
		    dfs(i,j);
     	}
	}
	for(int i =1;i<=n;i++)
	for(int j =1;j<=m;j++)
	{
		if(a[i][j]==2) ans++;
	}
	printf("%d",ans);
	return 0;
}
2022/12/22 14:35
加载中...