题目地址:点击打开链接
思路:简单BFS,可以走8个方向
AC代码:
#include<iostream> #include<queue> #include<cstdio> using namespace std; struct point { int x,y; int c; }from,to; int dx[8]={-1,-2,-2,-1,1,2,2,1}; int dy[8]={-2,-1,1,2,-2,-1,1,2}; void bfs(char a[],char b[]) { point temp; int i; queue<point> q; from.x=a[0]-'a'; from.y=a[1]-'1'; from.c=0; to.x=b[0]-'a'; to.y=b[1]-'1'; q.push(from); while(true) { from=q.front(); q.pop(); if(from.x==to.x&&from.y==to.y) break; for(i=0;i<8;i++) { temp.x=from.x+dx[i]; temp.y=from.y+dy[i]; temp.c=from.c+1; if(temp.x<0||temp.x>7||temp.y<0||temp.y>7) continue; q.push(temp); } } } int main() { char a[3],b[3]; while(scanf("%s%s",a,b)!=EOF) { bfs(a,b); printf("To get from %s to %s takes %d knight moves.\n",a,b,from.c); } return 0; }