关于我家马不想跑一事
查看原帖
关于我家马不想跑一事
559581
Lydia_qwq楼主2022/2/10 11:47

请指出我的代码哪里错了而不是直接发正解答案

如果一个点都不能走(如:3 3 2 2、2 2 1 2)答案就是对的,否则就死循环

#include<bits/stdc++.h>
using namespace std;
int Map[400][400],vis[400][400],ans[400][400];
const int dx[]={-2,-2,-1,-1,1,1,2,2},dy[]={-1,1,-2,2,-2,2,-1,1};
struct pos
{
	int x,y,step;
};
queue<pos> q;
int main()
{
	pos start; 
	int n,m,sx,sy;
	cin>>n>>m>>sx>>sy;
	start.x=sx;
	start.y=sy;
	start.step=0;
	q.push(start);
	vis[sx][sy]=1;
	while(!q.empty())
	{
		pos now=q.front();
		q.pop();
		ans[now.x][now.y]=now.step;
		for(int i=0;i<8;i++)
		{
			pos New;
			New.x=now.x+dx[i];
			New.y=now.y+dy[i];
			New.step=now.step+1;
			if(New.x<=0||New.x>n||New.y<=0||New.y>m||vis[New.x][New.y])continue;
			q.push(New);
			vis[sx][sy]=1;
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(ans[i][j]==0&&(i!=sx||j!=sy))ans[i][j]=-1;
			printf("%-5d",ans[i][j]);
		}
		cout<<'\n';
	}
	return 0;
}
2022/2/10 11:47
加载中...