1 #include <bits/stdc++.h>
2 using namespace std;
3 struct Node
4 {
5 int r,c;
6 Node(int a,int b) : r(a),c(b) {}
7 Node() {}
8 };
9 const int dr[] = {-2,-2,-1,-1,1,1,2,2};
10 const int dc[] = {-1,1,-2,2,-2,2,-1,1};
11
12 int r1,c1,r2,c2;
13 string in1,in2;
14 void read()
15 {
16 r1 = 8-(in1[1]-'0');c1 = in1[0]-'a';
17 cin >> in2;r2 = 8-(in2[1]-'0');c2 = in2[0]-'a';
18 }
19
20 int d[9][9];
21 bool limit(Node u)
22 {
23 return u.r>=0&&u.r<=7&&u.c>=0&&u.c<=7;
24 }
25 int solve()
26 {
27 memset(d,-1,sizeof(d));
28 queue<Node> q;
29 q.push(Node(r1,c1));
30 d[r1][c1] = 0;
31 while(!q.empty())
32 {
33 Node u = q.front();
34 q.pop();
35 if(u.r==r2&&u.c==c2) return d[r2][c2];
36 for(int i = 0; i < 8; i ++)
37 {
38 Node v = u;
39 v.r += dr[i];
40 v.c += dc[i];
41 if(limit(v)&&d[v.r][v.c]<0)
42 {
43 d[v.r][v.c] = d[u.r][u.c] + 1;
44 q.push(v);
45 }
46 }
47 }
48 }
49
50 void print(int rnt)
51 {
52 cout << "To get from " <<in1<< " to " <<in2<< " takes " <<rnt<< " knight moves." << endl;
53 }
54 int main()
55 {
56 while(cin >> in1)
57 {
58 read();
59 int rnt = solve();
60 print(rnt);
61 }
62 return 0;
63 }