#include<bits/stdc++.h>//国际象棋(骑士)只走斜对角线(1*2)
using namespace std;
int vis[10][10];
int dir[8][2]={2,1,1,2,-1,2,-2,1,-1,-2,-2,-1,1,-2,2,-1};
//!!!八个方位,2位分别存的xy
struct ss{
int step;
int x,y;
};
char a[3],b[3];//%s还要留一位给\0!!
int sx,sy,ex,ey;
int check(int x,int y){
if(x>=0&&x<8&&y>=0&&y<8) return 1;
return 0;
}
void bfs(int x,int y){
memset(vis,0,sizeof(vis));
queue<ss>q ;ss cur,tem;
cur.step=0;
cur.x=x;cur.y=y;
q.push(cur);
vis[x][y]=1;
while(!q.empty()){
cur=q.front();q.pop();
if(cur.x==ex&&cur.y==ey){
printf("To get from %s to %s takes %d knight moves.\n",a,b,cur.step);
return;
}
for(int i=0;i<8;i++){
tem.x=cur.x+dir[i][0]; tem.y=cur.y+dir[i][1];
if(check(tem.x,tem.y)&&!vis[tem.x][tem.y]){
vis[tem.x][tem.y]=1;
tem.step=cur.step+1;
q.push(tem);
}
}
}
}
int main(){
while(cin>>a>>b){
sx=a[0]-'a';sy=a[1]-'1';
ex=b[0]-'a';ey=b[1]-'1';
bfs(sx,sy);
}
}
07-23
252
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-12
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交