马的Hamilton周游路线
来源:互联网 发布:淘宝进货渠道去哪里找 编辑:程序博客网 时间:2024/05/22 14:23
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;}
0 0
- 马的Hamilton周游路线
- 马的Hamilton周游路线问题
- 马的Hamilton周游路线问题
- 马的Hamilton周游路线问题
- 求解马的周游路线
- 马的Hamilton周游问题,O(N)解决,N表棋盘规模
- 马的周游问题
- 1153. 马的周游问题
- 简单的马周游问题
- 1153. 马的周游问题
- 1153. 马的周游问题
- 马的周游C语言
- 1153 马的周游问题
- Hamilton Verissimo的blog
- Hamilton
- sicily 1152 1153 马的周游
- sicily 1152 简单的马周游问题
- sicily 1153 马的周游问题
- javascript里写html
- GitHub Pages 绑定来自阿里云的域名
- parseInt()和parseFloat()
- mybatis源码初步解析
- strcpy与memcpy区别
- 马的Hamilton周游路线
- delphi 八字排盘源码
- 事件分发
- 51.使用HorizontalScrollView+LinearLayout实现文字+图片的自动跑马灯效果
- [通用插件]爱奇艺vip,优酷vip,乐视vip,优酷云m3u8,mgtv解析,优酷解析插件,算法版,开放平台接口
- android 友盟分享
- 原生JavaScript简单的静态搜索过滤文字(只支持中文,暂无拼音搜索)
- IO流基本概念
- Fresco使用一