原题地址#include<stdio.h> int f[8][8],tx,ty; int x[8]={1,2,2,1,-1,-2,-2,-1}; int y[8]={-2,-1,1,2,2,1,-1,-2}; struct { int x,y,l;//xy坐标,l层数 }q[100];// 队列 int bfs(int x1,int y1,int x2,int y2)// 起点终点坐标 { int i,j,top=0; q[top].x=x1; q[top].y=y1; q[top++].l=0; f[x1][y1]=0; for(i=0;i<top;i++) { for(j=0;j<8;j++) { tx=q[i].x+x[j]; ty=q[i].y+y[j]; if(tx>=0&&tx<8&&ty>=0&&ty<8&&f[tx][ty]) { q[top].x=tx; q[top].y=ty; q[top].l=q[i].l+1; if(tx==x2&&ty==y2) return q[top].l; f[tx][ty]=0; top++; } } } } int main() { char k1[5],k2[5]; int x1,x2,y1,y2,i,j; while(scanf("%s%s",k1,k2)!=EOF) { if(k1[0]==k2[0]&&k1[1]==k2[1]) { printf("To get from %s to %s takes 0 knight moves./n",k1,k1); continue; } x1=k1[0]-97; y1=k1[1]-49; x2=k2[0]-97; y2=k2[1]-49; for(i=0;i<8;i++) for(j=0;j<8;j++) f[i][j]=1; printf("To get from %s to %s takes %d knight moves./n",k1,k2,bfs(x1,y1,x2,y2)); } } 前天晚上写的, 昨天没比赛军训。。 今天终于能到机房提交了~ 另外今天上午。。 我们营的拔河。。 刚要开始时去了趟厕所。 跑回去时结束了T。T