e2 e4 a1 b2 b2 c3 a1 h8 a1 h7 h8 a1 b1 c3 f6 f6
To get from e2 to e4 takes 2 knight moves. To get from a1 to b2 takes 4 knight moves. To get from b2 to c3 takes 2 knight moves. To get from a1 to h8 takes 6 knight moves. To get from a1 to h7 takes 5 knight moves. To get from h8 to a1 takes 6 knight moves. To get from b1 to c3 takes 1 knight moves. To get from f6 to f6 takes 0 knight moves.
<span style="font-size:24px;">#include<iostream> #include<cstring> #include<cstdlib> #include<queue> using namespace std; struct node { int x,y,num; }; int a1,a2,b1,b2; char c1,c2; int move[8][2]={-2,1,-2,-1,-1,2,-1,-2,1,-2,1,2,2,1,2,-1},v[9][9]; void bfs(int i,int j) { node now,temp; queue<node>q; now.x=i; now.y=j; now.num=0; memset(v,0,sizeof(v)); q.push(now); v[now.x][now.y]=1; while(!q.empty()) { now=q.front(); q.pop(); if(now.x==b2&&now.y==a2) { printf("To get from %c%d to %c%d takes %d knight moves.\n",c1,a1,c2,a2,now.num); return ; } for(int t=0;t<8;t++) { temp.x=now.x+move[t][0]; temp.y=now.y+move[t][1]; if(temp.x>0&&temp.x<9&&temp.y>0&&temp.y<9&&!v[temp.x][temp.y]) { v[temp.x][temp.y]=1; temp.num=now.num+1; q.push(temp); } } } } int main() { while(cin>>c1>>a1>>c2>>a2) { b1=c1-'a'+1; b2=c2-'a'+1; bfs(b1,a1); } return 0; }</span>
杭电 1372 Knight Moves(广搜模板题),布布扣,bubuko.com
原文地址:http://blog.csdn.net/u012766950/article/details/38119617