Untitled
/** - author : Nora - created : 25.1.25 9:3:3 pm. **/ #include <bits/stdc++.h> using namespace std; #define ll long long #define endl '\n' #define ld long double #define bye return 0 #define pb push_back #define pfr pop_front #define pbc pop_back #define pll pair<ll, ll> #define ff first #define ss second #define NO cout<<"NO" #define YES cout<<"YES" #define all(v) v.begin(), v.end() const ll N = 200007; const ll mod = 1000000007; const ll MAX=1e18; map<pair<char,ll>, vector<pair<char,ll>>> g; queue<pair<char,ll>> q; map<pair<char,ll>,ll> dist; void bfs(char c, ll n){ dist[{c,n}] = 0; q.push({c,n}); while (!q.empty()){ char c1 = q.front().ff; ll n1 = q.front().ss; q.pop(); for (auto [c2,n2] : g[{c1,n1}]){ if (dist[{c2,n2}] == -1){ dist[{c2,n2}] = dist[{c1,n1}] + 1; q.push({c2,n2}); } } } } void solve() { for (char c = 'a'; c <= 'h'; c++){ for (ll n = 1; n <= 8; n++){ char c1 = c-2; char c2 = c-1; char c3 = c+1; char c4 = c+2; char c5 = c+2; char c6 = c+1; char c7 = c-1; char c8 = c-2; ll n1 = n+1; ll n2 = n+2; ll n3 = n+2; ll n4 = n+1; ll n5 = n-1; ll n6 = n-2; ll n7 = n-2; ll n8 = n-1; if (c1 >= 'a' and c1 <= 'h' and n1 >= 1 and n1 <= 8) g[{c,n}].pb({c1,n1}); if (c2 >= 'a' and c2 <= 'h' and n2 >= 1 and n2 <= 8) g[{c,n}].pb({c2,n2}); if (c3 >= 'a' and c3 <= 'h' and n3 >= 1 and n3 <= 8) g[{c,n}].pb({c3,n3}); if (c4 >= 'a' and c4 <= 'h' and n4 >= 1 and n4 <= 8) g[{c,n}].pb({c4,n4}); if (c5 >= 'a' and c5 <= 'h' and n5 >= 1 and n5 <= 8) g[{c,n}].pb({c5,n5}); if (c6 >= 'a' and c6 <= 'h' and n6 >= 1 and n6 <= 8) g[{c,n}].pb({c6,n6}); if (c7 >= 'a' and c7 <= 'h' and n7 >= 1 and n7 <= 8) g[{c,n}].pb({c7,n7}); if (c8 >= 'a' and c8 <= 'h' and n8 >= 1 and n8 <= 8) g[{c,n}].pb({c8,n8}); } } ll n1,n2; char c1,c2; while (cin>>c1>>n1>>c2>>n2){ for (char c = 'a'; c <= 'h'; c++){ for (ll n = 1; n <= 8; n++){ dist[{c,n}] = -1; } } bfs(c1,n1); cout<<"To get from "<<c1<<n1<<" to "<<c2<<n2<<" takes "<<dist[{c2,n2}]<<" knight moves."<<endl; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll testcases=1; //cin>>testcases; while (testcases--) { solve(); cout<<endl; } }
Leave a Comment