标签:
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.
#include<iostream> #include<string> #include<cstring> #include<algorithm> #include<queue> #include<cstdio> using namespace std; struct Point { int x; int y; int step; Point (){} Point(const Point& temp) { x=temp.x; y=temp.y; step=temp.step; } bool operator == (const Point& temp)const { return (x==temp.x)&&(y==temp.y); } }; Point start; Point finish; int dx[]={-2,-2,-1,-1,1,1,2,2}; int dy[]={1,-1,2,-2,2,-2,1,-1}; bool maze[10][10]; int bfs() { queue<Point> q; start.step=0; if(start==finish) { return start.step; } q.push(start); maze[start.x][start.y]=1; while(!q.empty()) { Point temp=q.front(); q.pop(); for(int i=0;i<8;++i) { //cout<<(char)((int)temp.c+dx[i])<<" "<<temp.y+dy[i]<<endl; if(temp.x+dx[i]<=8&&temp.x+dx[i]>=1&&temp.y+dy[i]<=8&&temp.y+dy[i]>=1&&!maze[temp.x+dx[i]][temp.y+dy[i]]) { maze[temp.x+dx[i]][temp.y+dy[i]]=1; Point t; t.x=temp.x+dx[i]; t.y=temp.y+dy[i]; t.step=temp.step+1; //cout<<t.c<<" "<<t.y<<" "<<t.step<<endl; if(t==finish) { return t.step; } q.push(t); } } } return -1; } int main() { char a,b; while(scanf(" %c%d %c%d",&a,&start.y,&b,&finish.y)!=EOF) { //cout<<start.c<<" "<<start.y<<" "<<finish.c<<" "<<finish.y<<endl; start.x=a-'a'+1; finish.x=b-'a'+1; memset(maze,0,sizeof(maze)); int ans=bfs(); printf("To get from %c%d to %c%d takes %d knight moves.\n",a,start.y,b,finish.y,ans); } return 0; }
标签:
原文地址:http://blog.csdn.net/leeholmes/article/details/51356935