给你两个点 问 骑士这个玩意走几步能到 注意是走“日”字!走“日”字!走“日”字!重要的事情说三遍!
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char aa[4],bb[4];
int sx,sy,ex,ey,ans;
int dir[8][2]={1,-2,1,2,2,1,2,-1,-1,2,-1,-2,-2,1,-2,-1};
bool vis[10][10];
int qx[10000],qy[10000];
struct node
{
int x,y,z,step;
}a[1000000];
int bfs(int x,int y)
{
int l=0,r=1;
a[0].x=x,a[0].y=y;
a[0].step=0;
vis[x][y]=1;
while(l<r)
{
node cur=a[l++],next;
//printf("%d %d %d %d %c\n",cur.step,cur.x,cur.y,cur.z,map[cur.x][cur.y][cur.z]);
for(int i=0;i<8;i++)
{
next.x=cur.x+dir[i][0];
next.y=cur.y+dir[i][1];
next.step=cur.step+1;
if(next.x>0&&next.x<=8&&next.y>0&&next.y<=8&&!vis[next.x][next.y])
{
if(next.x==ex&&next.y==ey) return next.step;
vis[next.x][next.y]=1;
a[r++]=next;
}
}
// printf("%d %d %d %d %c\n",next.step,next.x,next.y,next.z,map[next.x][next.y][next.z]);
}
return 0;
}
int main()
{
//freopen("cin.txt","r",stdin);
while(cin>>aa>>bb)
{
memset(vis,0,sizeof(vis));
sx=aa[0]-96,ex=bb[0]-96;
sy=aa[1]-48,ey=bb[1]-48;
ans=0;
//printf("%d %d %d %d\n",sx,sy,ex,ey);
ans=bfs(sx,sy);
cout<<"To get from "<<aa<<" to "<<bb<<" takes "<<ans<<" knight moves."<<endl;
//cout<<ans<<endl;
}
return 0;
}