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;}

原创粉丝点击