给你两个点 问 骑士这个玩意走几步能到 注意是走“日”字!走“日”字!走“日”字!重要的事情说三遍!
题目不给看
#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; }