hdu1372 dfs搜索之国际象棋的马

原题地址


题意

一个8x8的国际象棋棋盘,你有一个棋子“马”。算出棋子“马”从某一格到另一格子的最少步数。

与普通dfs不同的是,你能走的路线不是上下左右,四个方向。而是由“日”

字组成的8个方向。虽然是国际象棋的马,但是其实和中国象棋的马走法还是一样的。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int d[8][2]={-1,-2,1,-2,-1,2,1,2,-2,1,-2,-1,2,1,2,-1};
int map[8][8];
int bi,bj;
void dfs(int i,int j,int step)
{
    map[i][j]=step;
    if(bi==i&&bj==j)
        return;
    for(int ii=0;ii<8;ii++)
    {
        int x=i+d[ii][0];
        int y=j+d[ii][1];
        if(x<0||x>=8||y<0||y>=8||map[x][y]<=step+1)
            continue;
        dfs(x,y,step+1);
    }
}
int main()
{
    char a,b;
    int ai,aj;
    while(cin>>a>>aj>>b>>bj)
    {
        memset(map,0x3f,sizeof map);
        ai=a-'a';
        bi=b-'a';
        aj--;
        bj--;
        dfs(ai,aj,0);
        printf("To get from %c%d to %c%d takes %d knight moves.\n",a,aj+1,b,bj+1,map[bi][bj]);
    }
}

题外话

中国象棋和国际象棋应该还是有些渊源的,的确二者的起源不同。中国象棋在战国以前就有了,而国际象棋流行的说法是起源于古印度。二者在千百年的历史长河中,其规则和形态也都是在一直变化的。中国古代很早就和印度有了往来,所以中国象棋在历史上遇到了国际象棋也是极为有可能的。二者相互影响。然后又各自发展,比如两种象棋的棋盘都是8x8的格子,两种棋中马和象都是一样的走法。而在古代国际象棋中的皇后的走法没有如今这么厉害,文献曾记载的皇后走法和中国象棋的士是相同的。同样在中国曾出土的唐代的象棋棋盘竟然是黑白格子相间的,这无疑与现代的国际象棋棋盘相同。而中国象棋中的楚河汉界是在宋代出现的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

果冻虾仁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值