国际象棋跳马程序(自编码研究)

本文探讨了在8x8棋盘上解决马步棋盘问题的方法,通过对比传统的递归算法与改进后的优先级搜索算法,阐述了如何优化路径选择策略,以减少计算复杂度并提高解决方案效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

把马随机放到8*8的一个棋盘里,按照马的行走规则,每个方格进入一次,走遍64个方格,将数字依次填入8*8个方格内,使用递归,思路很明显,但是怎么选择递归的走路问题,按照如下走,大约需要8^64  <> 6.2*10^57 计算机根本搞不定!!!!

我的算法:

int hourse_run(Node tmp)
{
        if ( hourse_run(Node(tmp.x+1,tmp.y+2)) )
            goto L;
        if ( hourse_run(Node(tmp.x+1,tmp.y-2)) )
            goto L;
        if ( hourse_run(Node(tmp.x-1,tmp.y+2)) )
            goto L;
        if ( hourse_run(Node(tmp.x-1,tmp.y-2)) )
            goto L;
        if ( hourse_run(Node(tmp.x+2,tmp.y+1)) )
            goto L;
        if ( hourse_run(Node(tmp.x-2,tmp.y+1)) )
            goto L;
        if ( hourse_run(Node(tmp.x+2,tmp.y-1)) )
            goto L;
        if ( hourse_run(Node(tmp.x-2,tmp.y-1)) )
            goto L;

网上搜的算法:

board[x][y]=step;
  int i,j; info dir[8];
  for(i=j=0;i<8;++i)
   if(x+dx[i]<0||y+dy[i]<0||x+dx[i]>=R||y+dy[i]>=C||board[x+dx[i]][y+dy[i]]) continue;
   else
   {
    dir[j].x=x+dx[i];dir[j].y=y+dy[i];
    dir[j].out=outlet(dir[j].x,dir[j].y);
    sort(dir,++j);
   }
  for(i=0;i<j;++i)
   if(search(dir[i].x,dir[i].y,step+1)) return true;
  board[x][y]=0;
  return false;

算法的精妙在于,让马优先按照边走,即优先让棋子的下一条的路最少的路走!!!!证明过程没有看懂:http://faculty.olin.edu/~sadams/DM/ktpaper.pdf;有看懂证明过程的可以给我留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值