8*8的国际象棋棋盘上的一只马,恰好走过除起点外的其他63个位置各一次,最后回到起点,这条路线称为马的一条Hamilton周游路线。对于给定的m*n的国际象棋棋盘,m和n均为大于5的偶数,且|m-n|≤2,试设计一个分治算法找出马的一条Hamilton周游路线。

#include<stdio.h>
#include<stdlib.h>
#define max 101 int m,n;//棋盘大小
int start_x,start_y;//起点位置
int dx[8]={-2,-1,1,2,-2,-1,2,1};
int dy[8]={-1,-2,-2,-1,1,2,1,2};
int board[max][max]={0};int finish(int x,int y)
{//判断是否是死路 if(x<1 || y<1 || x>m || y>n || board[x][y]!=0)return 0;elsereturn 1;
}
int next_move(int x,int y)
{//判断下一步能否回到起点 for(int i=0;i<8;i++)if(x+dx[i]==start_x && y+dy[i]==start_y) return 1;return 0;
}
void show(int n,int m)
{//输出路线 for(int i=1;i<=m;i++) {for(int j=1;j<=n;j++)printf("%3d",board[i][j]);printf("\n");}
}
void move(int x,int y,int num)
{if(num==n*m && next_move(x,y)) {show(n,m);exit(1);}for(int i=0;i<8;i++) {int next_x=x+dx[i];int next_y=y+dy[i];if(finish(next_x,next_y)) {board[next_x][next_y]=num+1;move(next_x,next_y,num+1);board[next_x][next_y]=0;}}
}
int main()
{printf("请输入棋盘的行数和列数:\n");scanf("%d%d",&m,&n);printf("请输入起始坐标:\n");scanf("%d%d",&start_x,&start_y);board[start_x][start_y]=1;int number=1;printf("马的周游路线为:\n");move(start_x,start_y,number);return 0;
} 

马的Hamilton周游路线相关推荐

  1. 马的Hamilton周游路线问题

    关于这道题,很多博客中都有相应的解法,我也看了很多篇,但是我发现,大多数都没有做到回到起点这个要求,所以我写一写自己的解法,如有错误欢迎指出. 问题描述: 8*8的国际象棋棋盘上的一只马(日字走法), ...

  2. 算法:马的Hamilton周游路线问题

    在国际象棋中马是走日字的,如果是一般情况马一共有八种走法(如下图): 所以我在这边用2个一位数组来表示其8种走法//考虑到马有8种走法int dx[8]={-2,-1,1,2,-2,-1,2,1};i ...

  3. 算法设计与分析----马的周游路线

    8 * 8的国际象棋棋盘上的一只马,恰好走过除起点外的其他63个位置各一次,最后回到起点,这条路线称为马的一条Hamilton周游路线.对于给定的m * n的国际象棋棋盘,m和n均为大于5的偶数,且| ...

  4. 马的哈密顿周游(分治)

    马的哈密顿周游(分治) 需求分析 0.问题描述 8x8 的国际象棋棋盘上的一只马,恰好走过除起点外的其他63个位置各一次,最后回到起点.这条路线称为马的一条Hamiton周游路线.对于给定的mxn的国 ...

  5. 【算法设计与分析】经典常考三十三道例题AC代码

    ❥小虾目前大三,我校在大一下开设<数据结构>这门课,大二上开了<算法设计与分析>这门课,很庆幸这两门课的上机考试总成绩一门100,一门99,最后总分也都90+.下文会给出机试的 ...

  6. 马的走法编程java_马周游问题(Java实现)

    马周游问题 1.问题描述 在一个n*n的棋盘中的某个位置有一只马,如果它走n*n步正好经过除起点外的其他位置各一次,这样一种走法则称马的周游路线,试设计一个算法,从给定的起点出发,找出它的一条周游路线 ...

  7. 回溯法 之 马周游(马跳日)问题

    回溯法的应用很多,下面讲述一个有趣的马周游问题. 马周游(马跳日)问题:在一个 8*8 的棋盘上(如下图)一匹马从任意位置开始,恰好走过棋盘中的每一格(每个格子有且只能走一次),并且最后还可以回到起点 ...

  8. 利用回溯算法求马周游问题

    马周游问题描述 对于一个8*8的棋盘,用下列的方式编号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...

  9. 回溯法 之 马周游(马跳日)问题

    回溯法的应用很多,下面讲述一个有趣的马周游问题. 马周游(马跳日)问题:在一个 8*8 的棋盘上(如下图)一匹马从任意位置开始,恰好走过棋盘中的每一格(每个格子有且只能走一次),并且最后还可以回到起点 ...

最新文章

  1. 自学Python六 爬虫基础必不可少的正则
  2. Linux命令Find实例
  3. MFC窗口风格 WS_style/WS_EX_style
  4. 解释一下Spring支持的几种bean的作用域
  5. arraylist删除指定元素_揭开ArrayList的外衣看本质
  6. 华为鸿蒙联合品牌,魅族官宣:接入华为鸿蒙!这是国产智能手机品牌的首个公开表态!...
  7. java对文件进行删除操作_Java删除文件夹和文件
  8. 【海康威视】WPF客户端二次开发:【4】Chrome浏览器调用客户端程序
  9. aspeed显卡安装ubuntu驱动
  10. 泰勒公式(泰勒展开式)通俗+本质详解
  11. 论文笔记:UCTransNet: Rethinking the Skip Connections in U-Net from a Channel-wisePerspective with Transf
  12. 2020-05-13
  13. Elesticsearch基础
  14. can收发器 rx_USB-CAN收发器
  15. 财神来了 | 那些年伤害过你的分叉币
  16. Java实现 蓝桥杯 算法训练 Cowboys
  17. Python制作发票自动校核微信机器人
  18. 谷歌眼镜开发指南之概述
  19. centos7 安装gitlab 之 被502支配的恐惧
  20. 数值分析(代码)-Picard迭代法、Newton迭代法

热门文章

  1. 计算机网络复习题(带答案)
  2. Linux系统如何联网
  3. Bray-Curtis距离
  4. 小码哥-斗鱼直播APP之内容简介
  5. Python最全安装教程,初学者赶紧收藏
  6. python timeit用法_python中的计时器timeit的使用方法
  7. 《鹰猎长空》讲述如何推动戏曲电影的发展
  8. ubuntu 卡死 解决办法
  9. [vba] 函数返回多个值
  10. python阶乘倒数求和_Python阶乘求和的方法