Problem C: 骑士移动

Problem C: 骑士移动

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 128 MiB

Description

写程序,计算骑士从一个位置移动到另一个位置所需的最少移动次数。骑士移动的规则如下图所示。


Input

输入的第1行为测试用例的个数N。每个测试用例都包含3行。

第1行表示棋盘的长度L(4≤L≤300),棋盘的大小为LxL;第2行和第3行包含一对{0,...,L-1}x{0,...L-1}的整数,表示骑士在棋盘上的起始位置和结束位置。

假设这些位置是该棋盘上的有效位置。

Output

对于每个测试用例,都单行输出骑士从起点移动到终点所需的最少移动次数。

如果起点和终点相等,则移动次数为零。

Sample Input Copy

3
8
0 0

Sample Output Copy

5
28 
0
7 0
100
0 0
30 50
10
1 1
1 1

HINT

队列(queue)只允许从队尾入队、从队头出队,不允许在中间位置插入和删除,不支持数
组表示法和随机访问。使用queue 时需要引入头文件#include<queue>。队列的基本操作很简单,
包括入队、出队、取队头、判断队空、求队列大小。
  • queue<int>q:创建一个空队q,数据类型为int。
  • push(x):x入队。
  • pop():出队。
  • front():取队头(未出队)。
  • empty():判断队列是否为空,若为空,则返回true。
  • size():求队列大小,返回队列中的元素个数。