/*中午又熬了,做出来了,还值得小高兴一下,呵呵 我的第一道宽度优先搜索 注意横纵坐标及从'a''1'开始的吧 感觉是个好题 不过不会c++很吃力啊*/ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> int dir[8][2] = {{2,1},{2,-1},{-2,1},{-2,-1},{1,2},{1,-2},{-1,2},{-1,-2}}; int flag[8][8]; struct node { int x,y,step; }q[10000]; struct node N,P; int main() { char a,b,c,d; int front,rear,i; while(scanf(" %c%c %c%c",&a,&b,&c,&d)!=EOF) { memset(flag,0,sizeof(flag)); int c1 = a - 'a'; int r1 = b - '1'; int c2 = c - 'a'; int r2 = d - '1'; N.x = r1; N.y = c1; N.step = 0; flag[r1][c1] = 1; q[0] = N; front = 0; rear = 1; while(front < rear) { N = q[front++]; if(N.x == r2 && N.y == c2) break; for(i=0;i<8;i++) { int tx = N.x + dir[i][0]; int ty = N.y + dir[i][1]; if(tx>=0&&tx<8 && ty>=0&&ty<8 && flag[tx][ty]!=1) { P.x = tx; P.y = ty; P.step = N.step + 1; q[rear++] = P; flag[tx][ty] = 1; } } } printf("To get from %c%c to %c%c takes %d knight moves.\n",a,b,c,d,N.step); } return 0; }
zoj 1091 Knight Moves
最新推荐文章于 2017-08-12 20:37:45 发布