用的DFS。
#include<stdio.h>
int x,y;
int max=6;
int pan(int a,int b)
{if(a>=0&&a<8&&b>=0&&b<8)return 1;return 0;
}
void dfs(int a,int b,int sum)
{if(sum>=max)return ;if(a==x&&b==y&&sum<max){max=sum;return ;}if(pan(a+2,b+1))dfs(a+2,b+1,sum+1);if(pan(a+2,b-1))dfs(a+2,b-1,sum+1);if(pan(a-2,b-1))dfs(a-2,b-1,sum+1);if(pan(a-2,b+1))dfs(a-2,b+1,sum+1);if(pan(a-1,b-2))dfs(a-1,b-2,sum+1);if(pan(a-1,b+2))dfs(a-1,b+2,sum+1);if(pan(a+1,b-2))dfs(a+1,b-2,sum+1);if(pan(a+1,b+2))dfs(a+1,b+2,sum+1);
}
int main()
{int x1,y1;char str1[100],str2[100];while(scanf("%s%s",str1,str2)!=EOF){max=6;x1=str1[0]-'a';y1=str1[1]-'1';x=str2[0]-'a';y=str2[1]-'1';dfs(x1,y1,0);printf("To get from %s to %s takes %d knight moves.\n",str1,str2,max);}return 0;
}