马的Hamilton周游路线
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周游路线相关推荐
- 马的Hamilton周游路线问题
关于这道题,很多博客中都有相应的解法,我也看了很多篇,但是我发现,大多数都没有做到回到起点这个要求,所以我写一写自己的解法,如有错误欢迎指出. 问题描述: 8*8的国际象棋棋盘上的一只马(日字走法), ...
- 算法:马的Hamilton周游路线问题
在国际象棋中马是走日字的,如果是一般情况马一共有八种走法(如下图): 所以我在这边用2个一位数组来表示其8种走法//考虑到马有8种走法int dx[8]={-2,-1,1,2,-2,-1,2,1};i ...
- 算法设计与分析----马的周游路线
8 * 8的国际象棋棋盘上的一只马,恰好走过除起点外的其他63个位置各一次,最后回到起点,这条路线称为马的一条Hamilton周游路线.对于给定的m * n的国际象棋棋盘,m和n均为大于5的偶数,且| ...
- 马的哈密顿周游(分治)
马的哈密顿周游(分治) 需求分析 0.问题描述 8x8 的国际象棋棋盘上的一只马,恰好走过除起点外的其他63个位置各一次,最后回到起点.这条路线称为马的一条Hamiton周游路线.对于给定的mxn的国 ...
- 【算法设计与分析】经典常考三十三道例题AC代码
❥小虾目前大三,我校在大一下开设<数据结构>这门课,大二上开了<算法设计与分析>这门课,很庆幸这两门课的上机考试总成绩一门100,一门99,最后总分也都90+.下文会给出机试的 ...
- 马的走法编程java_马周游问题(Java实现)
马周游问题 1.问题描述 在一个n*n的棋盘中的某个位置有一只马,如果它走n*n步正好经过除起点外的其他位置各一次,这样一种走法则称马的周游路线,试设计一个算法,从给定的起点出发,找出它的一条周游路线 ...
- 回溯法 之 马周游(马跳日)问题
回溯法的应用很多,下面讲述一个有趣的马周游问题. 马周游(马跳日)问题:在一个 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 ...
- 回溯法 之 马周游(马跳日)问题
回溯法的应用很多,下面讲述一个有趣的马周游问题. 马周游(马跳日)问题:在一个 8*8 的棋盘上(如下图)一匹马从任意位置开始,恰好走过棋盘中的每一格(每个格子有且只能走一次),并且最后还可以回到起点 ...
最新文章
- 自学Python六 爬虫基础必不可少的正则
- Linux命令Find实例
- MFC窗口风格 WS_style/WS_EX_style
- 解释一下Spring支持的几种bean的作用域
- arraylist删除指定元素_揭开ArrayList的外衣看本质
- 华为鸿蒙联合品牌,魅族官宣:接入华为鸿蒙!这是国产智能手机品牌的首个公开表态!...
- java对文件进行删除操作_Java删除文件夹和文件
- 【海康威视】WPF客户端二次开发:【4】Chrome浏览器调用客户端程序
- aspeed显卡安装ubuntu驱动
- 泰勒公式(泰勒展开式)通俗+本质详解
- 论文笔记:UCTransNet: Rethinking the Skip Connections in U-Net from a Channel-wisePerspective with Transf
- 2020-05-13
- Elesticsearch基础
- can收发器 rx_USB-CAN收发器
- 财神来了 | 那些年伤害过你的分叉币
- Java实现 蓝桥杯 算法训练 Cowboys
- Python制作发票自动校核微信机器人
- 谷歌眼镜开发指南之概述
- centos7 安装gitlab 之 被502支配的恐惧
- 数值分析(代码)-Picard迭代法、Newton迭代法