站外题求助全WA 0分
  • 板块学术版
  • 楼主CadeShuWindsor
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/8/18 09:36
  • 上次更新2023/10/27 14:50:21
查看原帖
站外题求助全WA 0分
452450
CadeShuWindsor楼主2022/8/18 09:36

题目:有一个n行m列的方格棋盘,左上(1,1)格有一个中国象棋的“马”,“马”行走的规则是“马走日”。 当然,马不能走到棋盘外面地方。问“马”到达右下(n,m)格的最少要跳几步? 如果到达不了右下格子,输出-1。

#include<bits/stdc++.h>
using namespace std;
int n,m; 
int a[105][105];

struct Tnode{
	int x,y;
	int step;
}qu[200000];

int dx[8]={-1,1,2,2,1,-1,-2,-2};
int dy[8]={2,2,1,-1,-2,-2,-1,1}; 

int BFS(int x0,int y0);

int main(){
    scanf("%d",&n);
    scanf("%d",&m);
	cout<<BFS(1,1);
    return 0;
}

int BFS(int x0,int y0)
{
	qu[0].x=x0;
	qu[0].y=y0;
	a[x0][y0]=0;
	int head=0;
	int tail=1;
	while(head<tail)
	{
		int x=qu[head].x;	
		int y=qu[head].y;
		int s=qu[head].step;
		head++;
		for(int d=0;d<8;d++)
		{
			int nx=x+dx[d];
			int ny=y+dy[d];
			
			if(nx==x&&ny==m)
				return s+1;
			
			if(a[nx][ny]!=0)
			{
				qu[tail].step=s+1;
				qu[tail].x=nx;
				qu[tail++].y=ny;
				a[nx][ny]=0;
			}
			
		}
	}
	return -1;	
}

全WA 0分

2022/8/18 09:36
加载中...