You are on page 1of 1

#include<stdio.

h>
#include<iostream>
#include<queue>
#include<utility>
#include<string.h>
using namespace std;
int bfs(pair<int,int> ori,pair<int,int> dest){
int d[8][8],i;
int x[] = {1, 1,2, 2,-1,-1,-2,-2};
int y[] = {2,-2,1,-1, 2,-2, 1,-1};
memset(d,0,sizeof(d));
queue<pair<pair<int,int>,int> > cola;
cola.push(make_pair(ori,0));
d[ori.first][ori.second]=1;
while(!cola.empty()){
pair<pair<int,int>,int> actual = cola.front();
cola.pop();
pair<int,int> pos=actual.first;
if(pos.first==dest.first && pos.second==dest.second)
return actual.second;
for(i=0;i<8;i++)
if(pos.first + x[i]>=0 && pos.first + x[i]<8 && pos.seco
nd + y[i]>=0 && pos.second + y[i]<8 && d[pos.first + x[i]][pos.second + y[i]]==0
){
d[pos.first+x[i]][pos.second+y[i]]=1;
cola.push(make_pair(make_pair(pos.first+x[i],pos
.second+y[i]),actual.second+1));
}
}
}
int main(void){
string pos1,pos2;
while(cin >> pos1 >> pos2)
printf("To get from %s to %s takes %d knight moves.\n",pos1.c_st
r(),pos2.c_str(),bfs(make_pair(pos1[1]-'0'-1,pos1[0]-'a'),make_pair(pos2[1]-'0'1,pos2[0]-'a')));
return 0;
}

You might also like