马踏棋盘算法(骑士周游问题)
要求:
国家棋盘为8*8的方格棋盘,将"马"放在任意指定方格中。最终让马走遍64个方格。
关于象棋中马的走法
如下图所示:
下面是代码:
#include <stdio.h>
#include <time.h>
#include <Windows.h>#define X 8
#define Y 8int chess[X][Y];// 找到基于(x,y)位置的下一个可走的位置
int nextxy(int *x, int *y, int count)
{switch (count){case 0:if (*x + 2 <= X - 1 && *y - 1 >= 0 && chess[*x + 2][*y - 1] == 0) //3这个位置{*x = *x + 2;*y = *y - 1;return 1;}break;case 1:if (*x + 2 <= X - 1 && *y + 1 <= Y - 1 && chess[*x + 2][*y + 1] == 0){*x = *x + 2;*y = *y + 1;return 1;}break;case 2:if (*x + 1 <= X - 1 && *y - 2 >= 0 && chess[*x + 1][*y - 2] == 0){*x = *x + 1;*y = *y - 2;return 1;}break;case 3:if (*x + 1 <= X - 1 && *y + 2 <= Y - 1 && chess[*x + 1][*y + 2] == 0){*x = *x + 1;*y = *y + 2;return 1;}break;case 4:if (*x - 2 >= 0 && *y - 1 >= 0 && chess[*x - 2][*y - 1] == 0){*x = *x - 2;*y = *y - 1;return 1;}break;case 5:if (*x - 2 >= 0 && *y + 1 <= Y - 1 && chess[*x - 2][*y + 1] == 0){*x = *x - 2;*y = *y + 1;return 1;}break;case 6:if (*x - 1 >= 0 && *y - 2 >= 0 && chess[*x - 1][*y - 2] == 0){*x = *x - 1;*y = *y - 2;return 1;}break;case 7:if (*x - 1 >= 0 && *y + 2 <= Y - 1 && chess[*x - 1][*y + 2] == 0){*x = *x - 1;*y = *y + 2;return 1;}break;default:break;}return 0;
}void print()
{int i, j;for (i = 0; i < X; i++){for (j = 0; j < Y; j++){printf_s("%2d\t", chess[i][j]);}printf_s("\n");}printf_s("\n");
}// 深度优先遍历棋盘
// (x,y)为位置坐标
// tag是标记变量,每走一步,tag+1
int TravelChessBoard(int x, int y, int tag)
{int x1 = x, y1 = y, flag = 0, count = 0;chess[x][y] = tag;// 如果tag==X*Y,则完成整个棋盘的遍历if (tag == X*Y){print();return 1;}flag = nextxy(&x1, &y1, count);while (0 == flag && count < 7){count++;flag = nextxy(&x1, &y1, count);}while (flag){if (TravelChessBoard(x1, y1, tag + 1)){return 1;}x1 = x;y1 = y;count++;flag = nextxy(&x1, &y1, count);while (0 == flag && count < 7){count++;flag = nextxy(&x1, &y1, count);}}if (0 == flag){chess[x][y] = 0;}return 0;
}int main()
{int i, j;clock_t start, finish;start = clock();for (i = 0; i < X; i++){for (j = 0; j < Y; j++){chess[i][j] = 0;}}if (!TravelChessBoard(2, 0, 1)){printf_s("马踏棋盘失败\n");}finish = clock();printf_s("\n本次计算一共耗时: %f秒\n\n", (double)(finish - start) / CLOCKS_PER_SEC);system("pause");return 0;
}
运行结构如下:
马踏棋盘算法(骑士周游问题)相关推荐
- 马踏棋盘算法(骑士周游)
思路分析 代码实现 package com.atguigu.horse;import java.awt.*; import java.util.ArrayList; import java.util. ...
- 马踏棋盘算法(骑士周游)+贪心优化
思路分析 代码实现 package com.atguigu.horse;import java.awt.*; import java.util.ArrayList; import java.util. ...
- Java对马踏棋盘问题(骑士周游问题)的实现
14.10.2 马踏棋盘游戏代码实现 马踏棋盘问题(骑士周游问题)实际上是图的深度优先搜索(DFS)的应用. 如果使用回溯(就是深度优先搜索)来解决,假如马儿踏了 53 个点,如图:走到了第 53 个 ...
- 【算法】马踏棋盘算法 骑士走周游算法
文章目录 1.概述 2.贪心优化 1.概述 马踏棋盘算法和八皇后问题很相似:[算法]八皇后问题 骑士周游问题的解决步骤和思路 创建棋盘chessBoard,是一个二维数组 将当前位置设置为已经访问,然 ...
- java 马踏棋盘优化_我所知道的十大常用算法之马踏棋盘算法(深度搜索、贪心思想优化 )...
前言需求 今天我们学习的是马踏棋盘算法,我们还是从一个场景里引入看看 马踏棋盘算法也被称为骑士周游问题 将马随机放在国际象棋的6×6棋盘Board0-5的某个方格中 提示:马按走棋规则(马走日字)进行 ...
- Day600601.马踏棋盘算法 -数据结构和算法Java
马踏棋盘算法 图的深度优先DFS 回溯 八皇后问题.小老鼠找迷宫问题 一.介绍 二.思路分析 三.代码实现 package com.achang.algorithm;import java.awt.* ...
- 数据结构(七)——Dijkasta 、Flyod、马踏棋盘算法
Dijkstra 算法 应用场景-最短路径问题 有 7 个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从 G 点出发,需要分别把邮件分别送到A, B, C , D, E, F 六 ...
- 数据结构与算法|马踏棋盘算法(小甲鱼)C语言代码的算法分析
马踏棋盘算法(骑士周游问题)的算法分析 C语言代码部分来自小甲鱼的<数据结构与算法> 文章目录 马踏棋盘算法(骑士周游问题)的算法分析 一.C语言代码实现 二.代码分析与算法思路 题目要求 ...
- 用java写的马踏棋盘算法
用java写的马踏棋盘算法 将马随机放在国际象棋的8×8棋盘Board[0-7][0-7]的某个方格中,马按走棋规则进行移动.要求每个方格只进入一次,走遍棋盘上全部64个方格. 代码 /* 马踏棋盘问 ...
最新文章
- 相同格式EXCEL汇总
- 用隐式反馈做推荐模型,你做对了吗
- 增量式pid调节方式有何优点_增量式PID的“假抗饱和”性
- [渝粤教育] 西南科技大学 农业推广学 在线考试复习资料
- Caffe源码解析4: Data_layer
- excel表格打印每页都有表头_这么漂亮的Excel表格,用黑白打印机打印真是可惜了...
- 苹果零售店每平方英尺能创造4000美元
- POI大量数据读取内存溢出分析及解决方案
- C Tricks(十一)—— 排除一个二维数组的边界
- repeater没有数据显示暂无数据,无记录
- 简单3小步,轻松搞定PS证件照换底色(有手就行)
- 我的世界服务器修改nbt,我的世界NBT教程 关于NBT作用与内容介绍
- 如何使用deeptools处理BAM数据
- angular: 代码正确的情况下npm不断提示 TS2307: Cannot find module XXX , TS2305: Module XXX has no exported member
- U-BOOT启动流程【03】
- 张钜楷;3.25黄金、原油、磅日、美加、澳美,外汇,今日行情分析及解套
- 2021-2022学年度第二学期21级Java程序设计理论模拟考试
- CANoe——CAPL案例
- 将循迹小车改为蓝牙控制自动避障小车#arduino
- Tomcat服务器关闭之后 , 不生成SESSIONS.ser文件
热门文章
- 我就是TMD很无聊的女生怎么样。
- 开发者在对项目失去信心后,该做什么?
- 关羽在韩国有块私家地?
- 公司鼓励程序员不要加班,去约会!
- 浏览器弹不出java_打开网址跳出弹窗“您的浏览器没有获得Java virtual machine 支持”,怎么办?...
- 怎么在百度云上部署php文件,在百度云主机上部署thinkphp5.1的注意事项
- Adobe illustrator 剪切蒙版 - 连载 14
- ae可围绕帧拖动放大插件:Drag Zoom Pro for AE mac(兼容M1)
- c++语言的设计与演化 pdf_天津大学在金属材料织构设计与调控领域取得进展
- P1028 [NOIP2001 普及组] 数的计算 python