#include<iostream>
#include<string.h>
using
namespace
std;
bool
qp[101][101];
bool
p = 0;
void
MTFY(
int
s,
int
x,
int
y,
int
m,
int
n)
{
int
xx, yy; //必须定义新的变量,否则会影响到第一次以后的所有递归
if
(x == m&&y == n){ p = 1;
return
; }//走到燕的位置
if
(s == 4)
return
; //四步之内走不到燕的位置
for
(
int
i = 1; i <= 8; i++)
{
switch
(i) //马走日的8种情况
{
case
1:xx=x - 2; yy=y-1;
break
;
case
2:xx=x - 2; yy=y+1;
break
;
case
3:xx=x-1; yy=y + 2;
break
;
case
4:xx=x+1; yy=y + 2;
break
;
case
5:xx=x + 2; yy=y+1;
break
;
case
6:xx=x + 2; yy= y-1;
break
;
case
7:xx=x+1; yy=y - 2;
break
;
case
8:xx=x-1; yy=y - 2;
break
;
}
if
(xx > 0 && xx <= 100 && yy > 0 && yy <= 100 && !qp[xx][yy])//不能出棋盘
{
qp[xx][yy] = 1;
MTFY(s + 1, xx, yy, m, n);
qp[xx][yy] = 0;
}
}
}
int
main()
{
int
x, y, m, n;
cin >> x >> y >> m >> n;
memset
(qp, 0,
sizeof
(qp)); //初始化数组
MTFY(0, x, y, m, n);
if
(p)cout <<
"Y"
;
else
cout <<
"N"
;
return
0;
}
链接网址:http://www.acmicpc.sdnu.edu.cn/Problem.aspx?pid=1025
(本人菜鸟,如有错误 敬请指出~谢谢)