不知道哪错了。。。玄关
  • 板块P1443 马的遍历
  • 楼主__Sun
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/8/26 09:18
  • 上次更新2023/11/3 01:10:09
查看原帖
不知道哪错了。。。玄关
1054430
__Sun楼主2023/8/26 09:18
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;

int n,m,x,y;
bool flag[410][410];
int ans[410][410];
queue<int>sx;
queue<int>sy;

int dx[9]={0,-2,-1,+1,+2,-2,-1,+1,+2};
int dy[9]={0,-1,-2,-1,-1,+1,+2,+2,+1};

int main()
{
	scanf("%d%d%d%d",&n,&m,&x,&y);
	memset(ans,-1,sizeof(ans));
	ans[x][y]=0;
	flag[x][y]=1;
	sx.push(x);
	sy.push(y);
	
	while( !sx.empty() )
	{	x=sx.front();
		y=sy.front();
		sx.pop();
		sy.pop();
		
		for(int i=1;i<=8;i++)
		{	if( flag[x+dx[i]][y+dy[i]]==0 && x+dx[i]>0 && x+dx[i]<=n && y+dy[i]>0 && y+dy[i]<=m )
			{	sx.push(x+dx[i]);
				sy.push(y+dy[i]);
				flag[x+dx[i]][y+dy[i]]=1;
				ans[x+dx[i]][y+dy[i]]=ans[x][y]+1;
			}
		}
	}
	
	for(int i=1;i<=n;i++)
	{	for(int k=1;k<=m;k++)
		{	printf("%-5d",ans[i][k]);	}
		printf("\n");
	}
	
	return 0;
}

样例没过 10分求助

2023/8/26 09:18
加载中...