Knight Moves
来源:互联网 发布:nba费舍尔数据 编辑:程序博客网 时间:2024/05/01 13:50
#include<stdio.h>#include<string.h>#include<queue>using namespace std;int dir[8][2]={1,2, -1,2, 1,-2, -1,-2, 2,1, -2,1, 2,-1, -2,-1};int num[10][10];int sx,sy,ex,ey;struct node{ int x,y,step;};int judge(int x,int y){ if(x>=0&&x<8&&y>=0&&y<8) return 1; else return 0;}int dfs(){ node cur,next; queue<node>q; int x,y,k; cur.x=sx;cur.y=sy;cur.step=0; q.push(cur); num[sx][sy]=1; while(!q.empty()) { cur=q.front(); q.pop(); if(cur.x==ex&&cur.y==ey) return cur.step; next.step=cur.step+1; for(k=0;k<8;k++) { next.x=x=cur.x+dir[k][0]; next.y=y=cur.y+dir[k][1]; if(judge(x,y)&&!num[x][y]) { num[x][y]=1; q.push(next); } } } return 0;}int main(){ int count; char str1[3],str2[3]; while(scanf("%s%s",str1,str2)!=EOF) { memset(num,0,sizeof(num)); sx=str1[0]-'a'; sy=str1[1]-'1'; ex=str2[0]-'a'; ey=str2[1]-'1'; count=dfs(); printf("To get from %s to %s takes %d knight moves.\n",str1,str2,count); } return 0;}