样例过了但是爆零
查看原帖
样例过了但是爆零
101301
幻影学霸刘楼主2020/8/30 14:52
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,m,a,b,t[512][512];
bool v[512][512]={};
void dfs(int x,int y,int z)
{
	if(v[x][y])
	{
		return;
	}	
	t[x][y]=min(t[x][y],z);
	v[x][y]=1;
	if((x+2<=n&&y+1<=m)&&v[x+2][y+1]==0)
	{
		dfs(x+2,y+1,z+1);
	}
	if((x+2<=n&&y-1>=1)&&v[x+2][y-1]==0)
	{
		dfs(x+2,y-1,z+1);
	}
	if((x-2>=1&&y+1<=m)&&v[x-2][y+1]==0)
	{
		dfs(x-2,y+1,z+1);
	}
	if((x-2>=0&&y-1>=0)&&v[x-2][y-1]==0)
	{
		dfs(x-2,y-1,z+1);
	}
	if((x+1<=n&&y+2<=m)&&v[x+1][y+2]==0)
	{
		dfs(x+1,y+2,z+1);
	}
	if((x+1<=n&&y-2>=1)&&v[x+1][y-2]==0)
	{
		dfs(x+1,y-2,z+1);
	}
	if((x-1>=1&&y+2<=m)&&v[x-1][y+2]==0)
	{
		dfs(x-1,y+2,z+1);
	}
	if((x-1>=1&&y-2>=1)&&v[x-1][y-2]==0)
	{
		dfs(x-1,y-2,z+1);
	}
	v[x][y]=0;
	return;
}
int main()
{
	cin>>n>>m>>a>>b;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if((i+2>n&&i-2<1)&&(j+2>m&&j-2<1))
			{
				t[i][j]=-1;
				continue;
			}
			t[i][j]=0x3f3f3f;
		}
	}
	dfs(a,b,0);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cout<<t[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}
2020/8/30 14:52
加载中...