Untitled

 avatar
unknown
plain_text
21 days ago
2.8 kB
3
Indexable
/**
   - 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