-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy path#1308 搜索二·骑士问题AC(bfs).cpp
83 lines (73 loc) · 1.37 KB
/
#1308 搜索二·骑士问题AC(bfs).cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include "iostream"
#include "string.h"
#include "queue"
using namespace std;
typedef pair<int, int> pii;
char ss[3];
int vis[3][8][8];
int d[8][2] = { { -2,1 },{ -2,-1 },{ -1,-2 },{ -1,2 },{ 2,-1 },{ 2,1 },{ 1,-2 },{ 1,2 } };
int step = 0;
pii pos; //ÂíλÖÃ
bool in(pii p)
{
if (p.first < 0 || p.second < 0 || p.first>7 || p.second>7)
return false;
else
return true;
}
void bfs(int vi[8][8])
{
step = 0;
queue<pii> q;
memset(vi, -1, 256);
q.push(pos);
vi[pos.first][pos.second] = 0;
while (!q.empty())
{
pii pfront = q.front();
q.pop();
for (int i = 0; i < 8; i++)
{
pii temp;
temp.first = pfront.first + d[i][0];
temp.second = pfront.second + d[i][1];
if (in(temp) && vi[temp.first][temp.second] == -1)
{
vi[temp.first][temp.second] = vi[pfront.first][pfront.second] + 1;
q.push(temp);
}
}
}
}
int main()
{
int t;
cin >> t;
while (t--)
{
scanf("%s", ss);
pos = make_pair(ss[0] - 'A', ss[1] - '1');
bfs(vis[0]);
scanf("%s", ss);
pos = make_pair(ss[0] - 'A', ss[1] - '1');
bfs(vis[1]);
scanf("%s", ss);
pos = make_pair(ss[0] - 'A', ss[1] - '1');
bfs(vis[2]);
int ans = 1e9;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
int temp = 0;
for (int k = 0; k < 3; k++)
{
temp += vis[k][i][j];
}
if (temp < ans)
ans = temp;
}
}
cout << ans << endl;
}
}