时间限制:1秒 内存限制:128M
题目描述
如图,从左下角A点出发,马只能向右走,根据马走日字的规则,究竟如何走才能到达右上角B点
输入描述
两个整数x、y,代表右上角B点的坐标,A点默认为(1,1),x,y<=1000
输出描述
马走的路径方向,例如上图路径可表示为4 3 2 4 1 4,但注意,为了保证结果唯一,程序中马尝试各方向的顺序如上图,依次为1、2、3、4.因此上图的正确答案为3 2 4 1 4 4,如果无路可走,则输出-1
样例
输入
5 5
输出
4 1 4 4
#include<cmath>
#include<cstdio>
#include<queue>
#include<string>
#include<cstring>
#include<iomanip>
#include<iostream>
#include<algorithm>
using namespace std;
int road[100];
int dx[5]= {0,1,2,2,1};
int dy[5]= {0,-2,-1,1,2};
int flag;
int ex,ey;
void dfs(int x,int y,int k) {
if(flag==1) {
return;
}
if(x==ex&&y==ey) {
flag=1;
for(int i=0; i<k; i++) {
cout<<road[i]<<" ";
}
return;
}
if((ey-y)>2*(ex-x)){
return;
}
for(int i=1; i<=4; i++) {
int nx=x+dx[i];
int ny=y+dy[i];
if(!flag&&nx>=1&&nx<=ex&&ny>=1&&ny<=ey) {
road[k]=i;
dfs(nx,ny,k+1);
}
}
return ;
}
int main() {
cin>>ex>>ey;
dfs(1,1,0) ;
if(flag==0){
cout<<-1;
}
return 0;
}