说明:骑士旅游(Knight tour)在十八世纪初倍受数学家与拼图迷的注意,它什么时候被提出已不可考,骑士的走法为西洋棋的走法,骑士可以由任一个位置出发,它要如何走完[所有的位置?

解法:骑士的走法,基本上可以使用递回来解决,但是纯綷的递回在维度大时相当没有效率,一个聪明的解法由J.C. Warnsdorff在1823年提出,简单的说,先将最难的位置走完,接下来的路就宽广了,骑士所要走的下一步,「为下一步再选择时,所能走的步数最少的一步。」,使用这个方法,在不使用递回的情况下,可以有较高的机率找出走法(找不到走法的机会也是有的)。

在一个n m 格子的棋盘上,有一只国际象棋的骑士在棋盘的左下角,骑士只能根据象棋的规则进行移动,要么横向跳动一格纵向跳动两格,要么纵向跳动一格横向跳动两格。 例如, n=4,m=3 时,若骑士在格子(2;1) ,则骑士只能移入下面格子:(1;3),(3;3) 或 (4;2);对于给定正整数n,m,I,j值 (m,n<=50,I<=n,j<=m) ,你要测算出从初始位置(1;1) 到格子(i;j)最少需要多少次移动。如果不可能到达目标位置,则输出"NEVAR"。

骑士旅游的伪码:

FOR(m = 2; m <= 总步数; m++)

[

测试下一步可以走的八个方向,记录可停留的格数count。

IF(count == 0)

[

游历失败

]

ELSE IF(count == 1)

[

下一步只有一个可能

]

ELSE

[

找出下一步的出路最少的格子

如果出路值相同,则选第一个遇到的出路。

]

走最少出路的格子,记录骑士的新位置。

]

#include int board[8][8] = {0};int main(void) {int startx, starty;int i, j;printf("输入起始点:");scanf("%d %d

骑士周游算法 c语言_C语言经典算法04--骑士走棋盘(骑士旅游:Knight tour)相关推荐

  1. 电子英汉词典c语言程序设计报告,英汉电子词典设计报告_设计_C语言_C语言程序设计.doc...

    英汉电子词典设计报告_设计_C语言_C语言程序设计 课程设计 课程名称 :C语言程序课程设计 题目名称 :电子英汉词典 学生学院 :电气信息学院 专业班级 :自动化1101 学 号 :20110102 ...

  2. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

  3. 《算法之道》精华 经典算法部分

    <算法之道>精华 经典算法部分 本书作者邹恒明,作者另有一本书<数据结构之弦>,以及<操作系统之哲学原理>都是非常好的书 这本书能够算得上是深入浅出,文笔非常好.作 ...

  4. cshop是什么开发语言_C语言是用什么语言编写出来的?

    谢邀 参考 Dennis M. Ritchie 写的 The Development of the C Language:Chistory,C 语言诞生的基本过程就是 Ken Thomson 不满意 ...

  5. java经典100例算法题_10道java经典算法题,每一题都能帮你提升java水平!

    JAVA经典算法题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子 ...

  6. 翻手算法php,PHP各种常见经典算法总结【排序、查找、翻转等】

    本文实例讲述了php各种常见经典算法.分享给大家供大家参考,具体如下: 冒泡排序算法 public function test() { $arr = array(43, 54, 62, 21, 66, ...

  7. java经典问题算法大全_10道java经典算法!每一题都能提升你的java能力!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 10道java经典算法! [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位. ...

  8. perm函数c语言_C语言之递归排序算法

    一.什么是递归算法? 递归算法是把问题转化为规模缩小了的同类问题的子问题.然后递归调用函数(或过程)来表示问题的解. 一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数). ...

  9. 算法精解_C语言 链表_单链表(接口定义+类型实现)

    链表可以说是一种最为基础的数据结构.链表由一组元素以一种特定的顺序组合或链接而成,在维护数据的集合时很有用.这一点同我们常用的数组很相似.然而,链表在很多情况下比数组更有优势.特别是在执行插入和删除操 ...

最新文章

  1. Android Studio 填坑指南
  2. iphone11系统输入框的光标位置不正常
  3. C++ public、protected、private区别
  4. 如何在前端进行短信接口和语音验证接口的使用
  5. Android 自定义View以及ValueAnimator学习
  6. 求你了,别再随便打日志了,教你动态修改日志级别!
  7. 中金:基金投顾试点扩容,买方时代已至
  8. 使用swix反编译swf文件修改版权
  9. 【计算机系统组成】IO设备知识要点
  10. 吝啬SAT问题是NP完全问题的证明
  11. 右脑图像记忆法原理和方法入门
  12. P1336 课题选择
  13. 实验物理与工业控制系统---EPICS
  14. 使用C#编写17种Hello World程序(初学者C#测试石)
  15. Matplotlib不显示中文解决办法
  16. C++ 函数反汇编跟踪以及栈结构分析
  17. 同时删除多个 Txt 文本文档的前几行
  18. C语言人机大战之三字棋博弈
  19. pip安装pytorch清华_通过 pip 安装 pytorch
  20. 荣耀7x刷android10,华为荣耀畅玩7X官方固件rom包_荣耀畅玩7X完整系统升级包

热门文章

  1. 最早做无糖茶的统一茶里王,是怎样错过年轻人的?
  2. 银行IT迎“高景气”时代,宇信科技如何领跑行业?
  3. 赢得市值,失去人心,美团觉得划算吗?
  4. python 阿里云短信接口_阿里云短信PythonSDK的用法
  5. mysql远程服务器返回错误404未找到_远程服务器返回错误: 404错误、远程服务器返回错误:500错误、 HttpWebResponse远程服务器返回错误:(404、500) 错误。...
  6. 从0开始利用宝塔linux面板+WordPress一键部署搭建个人的博客介绍
  7. 使用python装饰器计算函数运行时间的实例
  8. Python 的类其实是一个特殊的对象
  9. Python命令行之旅:使用argparse实现git命令
  10. Linux是否兼容windows跨区卷,简单卷与跨区卷的区别介绍