题目描述
写程序,计算象棋中马从一个位置移动到另一个位置所需的最少移动次数。
输入格式
有多组测试数据。
第一行一个整数 T,代表数据组数。
每组数据包含三行。
第一行表示棋盘的长度 L,棋盘大小为 L×L。
第二行包含两个整数 x, y,表示马的起始位置坐标。
第三行包含两个整数 a, b,表示马的终点位置坐标。
L 最大为 300。
棋盘坐标范围为 [0, …, L-1]。
输出格式
对于每组数据输出一行,包含一个数字,即最少移动次数。
若起点终点相同,则移动次数为 0。
输入样例 复制
3
8
0 0
7 0
100
0 0
30 50
10
1 1
1 1
输出样例 复制
5
28
0
知识总结
- queue的使用
- malloc函数动态申请连续的某个类型的内存空间
- memset清空数组
#include<bits/stdc++.h>
#include<queue>//广度优先
using namespace std;
int dr[] = {
1, 2, 2, 1, -1, -2, -2, -1 };//移动操作
int dc[] = {
-2, -1, 1, 2, 2, 1, -1, -2 };
int vis[305][305], dis[305][305