信息奥赛一本通1257:Knight Moves

【题目描述】
输入n代表有个n×n的棋盘,输入开始位置的坐标和结束位置的坐标,问一个骑士朝棋盘的八个方向走马字步,从开始坐标到结束坐标可以经过多少步。
信息奥赛一本通1257:Knight Moves_第1张图片

【输入】
首先输入一个n,表示测试样例的个数。

每个测试样例有三行。

第一行是棋盘的大小L(4≤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
代码如下:

//1257:Knight Moves
#include
#include
using namespace std;
int l,r,c,k,i,j,m,T;//T组数据 
int map[301][301];
int num,que[90001][3];//队列,que[i][2]记录走的第几步,que[i][0],记录走过的点横坐标x,que[i][1]纵坐标 
int soux,souy,desx,desy,head,tail;//记录出发点、目标点的层数,坐标, 
int dx[8]={-2,-1,1,2,2,1,-1,-2},
	dy[8]={1,2,2,1,-1,-2,-2,-1};//马往8个方向跳 
int main()
{
	cin>>T;
	while(T>0)//T组数据
	{	
		cin>>l;
		cin>>soux>>souy;//输入出发点 
		cin>>desx>>desy;//输入目标点
		if(soux==desx&&souy==desy)
		{
			cout<<0<

你可能感兴趣的:(C++)