题目
用bfs搜的时候,没想到会有到达不了的情况 于是造成输出为空的情况
#define _CRT_SECURE_NO_WARNINGS
#include <string>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <list>
#include <set>
#include <map>
#include <utility> //pair
#include <string.h>
#include <algorithm> // 算法
#include <numeric> // 算法
#include <functional> // 算法
#include <iostream>
#include <stdio.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pr;
void clear(queue<pr>& q) {
queue<pr> empty;
swap(empty, q);
}
int bfs(pr a,pr b,int l) {
queue<pr> q;
int d[305][305], v[305][305];
pr dt[8];
dt[0] = make_pair(1, 2);
dt[1] = make_pair(1, -2);
dt[2] = make_pair(2, 1);
dt[3] = make_pair(2, -1);
dt[4] = make_pair(-1, 2);
dt[5] = make_pair(-1, -2);
dt[6] = make_pair(-2,1);
dt[7] = make_pair(-2, -1);
clear(q); memset(d, 0,sizeof(d)); memset(v, 0,sizeof(v));
q.push(a);
d[a.first][a.second] = 0; v[a.first][a.second] = 1;
while (q.size()) {
pr c = q.front();
if (b == c) {
return d[c.first][c.second];
}
q.pop();
for (int i = 0; i < 8; i++) {
int newx = c.first + dt[i].first;
int newy = c.second + dt[i].second;
if (newx >= 0 && newx < l && newy >= 0 && newy < l && v[newx][newy] == 0) {
q.push(make_pair(newx, newy));
d[newx][newy] = d[c.first][c.second] + 1;
v[newx][newy] = 1;
}
}
}
return 0; //非常容易遗漏
}
int main()
{
int t; cin >> t;
while (t--) {
int l; cin >> l;
int sx, sy, ex, ey; cin >> sx >> sy >> ex >> ey;
pr s, e; s = make_pair(sx, sy); e = make_pair(ex, ey);
cout<<bfs(s,e,l)<<endl;
}
return 0;
}