/*不停地BFS 我发现BFS的题目泛滥了*/
Problem : 1372 ( Knight Moves ) Judge Status : Accepted
RunId : 3710302 Language : C++ Author : zjut11018
Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta
#include<iostream>
#include<queue>
#include<string>
using namespace std;
int dir[8][2]={-1,-2,-1,2,-2,1,-2,-1,2,1,2,-1,1,2,1,-2};
int vis[8][8],ans;
struct node
{
int x,y,dis;
node(int _x=0,int _y=0,int _dis=0):x(_x),y(_y),dis(_dis){};
};
node s,e;
string a[2];
void BFS()
{
memset(vis,0,sizeof(vis));
queue <node> q;
q.push(s);
vis[s.x][s.y]=1;
while(!q.empty())
{
node t=q.front();
q.pop();
if(e.x==t.x&&e.y==t.y){ans=t.dis;return;}
for(int k=0;k<8;k++)
{
int x=t.x+dir[k][0];
int y=t.y+dir[k][1];
if(x>=0&&x<8&&y>=0&&y<8&&!vis[x][y])
{
vis[x][y]=1;
q.push(node(x,y,t.dis+1));
}
}
}
}
int main()
{
while(cin>>a[0]>>a[1])
{
s.x=a[0][0]-'a';s.y=a[0][1]-'1';s.dis=0;
e.x=a[1][0]-'a';e.y=a[1][1]-'1';
ans=0;
BFS();
cout<<"To get from "<<a[0]<<" to "<<a[1]<<" takes "<<ans<<" knight moves."<<endl;
}
}