要求:

国家棋盘为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;
}

运行结构如下:

马踏棋盘算法(骑士周游问题)相关推荐

  1. 马踏棋盘算法(骑士周游)

    思路分析 代码实现 package com.atguigu.horse;import java.awt.*; import java.util.ArrayList; import java.util. ...

  2. 马踏棋盘算法(骑士周游)+贪心优化

    思路分析 代码实现 package com.atguigu.horse;import java.awt.*; import java.util.ArrayList; import java.util. ...

  3. Java对马踏棋盘问题(骑士周游问题)的实现

    14.10.2 马踏棋盘游戏代码实现 马踏棋盘问题(骑士周游问题)实际上是图的深度优先搜索(DFS)的应用. 如果使用回溯(就是深度优先搜索)来解决,假如马儿踏了 53 个点,如图:走到了第 53 个 ...

  4. 【算法】马踏棋盘算法 骑士走周游算法

    文章目录 1.概述 2.贪心优化 1.概述 马踏棋盘算法和八皇后问题很相似:[算法]八皇后问题 骑士周游问题的解决步骤和思路 创建棋盘chessBoard,是一个二维数组 将当前位置设置为已经访问,然 ...

  5. java 马踏棋盘优化_我所知道的十大常用算法之马踏棋盘算法(深度搜索、贪心思想优化 )...

    前言需求 今天我们学习的是马踏棋盘算法,我们还是从一个场景里引入看看 马踏棋盘算法也被称为骑士周游问题 将马随机放在国际象棋的6×6棋盘Board0-5的某个方格中 提示:马按走棋规则(马走日字)进行 ...

  6. Day600601.马踏棋盘算法 -数据结构和算法Java

    马踏棋盘算法 图的深度优先DFS 回溯 八皇后问题.小老鼠找迷宫问题 一.介绍 二.思路分析 三.代码实现 package com.achang.algorithm;import java.awt.* ...

  7. 数据结构(七)——Dijkasta 、Flyod、马踏棋盘算法

    Dijkstra 算法 应用场景-最短路径问题 有 7 个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从 G 点出发,需要分别把邮件分别送到A, B, C , D, E, F 六 ...

  8. 数据结构与算法|马踏棋盘算法(小甲鱼)C语言代码的算法分析

    马踏棋盘算法(骑士周游问题)的算法分析 C语言代码部分来自小甲鱼的<数据结构与算法> 文章目录 马踏棋盘算法(骑士周游问题)的算法分析 一.C语言代码实现 二.代码分析与算法思路 题目要求 ...

  9. 用java写的马踏棋盘算法

    用java写的马踏棋盘算法 将马随机放在国际象棋的8×8棋盘Board[0-7][0-7]的某个方格中,马按走棋规则进行移动.要求每个方格只进入一次,走遍棋盘上全部64个方格. 代码 /* 马踏棋盘问 ...

最新文章

  1. 相同格式EXCEL汇总
  2. 用隐式反馈做推荐模型,你做对了吗
  3. 增量式pid调节方式有何优点_增量式PID的“假抗饱和”性
  4. [渝粤教育] 西南科技大学 农业推广学 在线考试复习资料
  5. Caffe源码解析4: Data_layer
  6. excel表格打印每页都有表头_这么漂亮的Excel表格,用黑白打印机打印真是可惜了...
  7. 苹果零售店每平方英尺能创造4000美元
  8. POI大量数据读取内存溢出分析及解决方案
  9. C Tricks(十一)—— 排除一个二维数组的边界
  10. repeater没有数据显示暂无数据,无记录
  11. 简单3小步,轻松搞定PS证件照换底色(有手就行)
  12. 我的世界服务器修改nbt,我的世界NBT教程 关于NBT作用与内容介绍
  13. 如何使用deeptools处理BAM数据
  14. angular: 代码正确的情况下npm不断提示 TS2307: Cannot find module XXX , TS2305: Module XXX has no exported member
  15. U-BOOT启动流程【03】
  16. 张钜楷;3.25黄金、原油、磅日、美加、澳美,外汇,今日行情分析及解套
  17. 2021-2022学年度第二学期21级Java程序设计理论模拟考试
  18. CANoe——CAPL案例
  19. 将循迹小车改为蓝牙控制自动避障小车#arduino
  20. Tomcat服务器关闭之后 , 不生成SESSIONS.ser文件

热门文章

  1. 我就是TMD很无聊的女生怎么样。
  2. 开发者在对项目失去信心后,该做什么?
  3. 关羽在韩国有块私家地?
  4. 公司鼓励程序员不要加班,去约会!
  5. 浏览器弹不出java_打开网址跳出弹窗“您的浏览器没有获得Java virtual machine 支持”,怎么办?...
  6. 怎么在百度云上部署php文件,在百度云主机上部署thinkphp5.1的注意事项
  7. Adobe illustrator 剪切蒙版 - 连载 14
  8. ae可围绕帧拖动放大插件:Drag Zoom Pro for AE mac(兼容M1)
  9. c++语言的设计与演化 pdf_天津大学在金属材料织构设计与调控领域取得进展
  10. P1028 [NOIP2001 普及组] 数的计算 python