题目:有一个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分