骑士周游算法 c语言_C语言经典算法04--骑士走棋盘(骑士旅游:Knight tour)
说明:骑士旅游(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)相关推荐
- 电子英汉词典c语言程序设计报告,英汉电子词典设计报告_设计_C语言_C语言程序设计.doc...
英汉电子词典设计报告_设计_C语言_C语言程序设计 课程设计 课程名称 :C语言程序课程设计 题目名称 :电子英汉词典 学生学院 :电气信息学院 专业班级 :自动化1101 学 号 :20110102 ...
- 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。
十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...
- 《算法之道》精华 经典算法部分
<算法之道>精华 经典算法部分 本书作者邹恒明,作者另有一本书<数据结构之弦>,以及<操作系统之哲学原理>都是非常好的书 这本书能够算得上是深入浅出,文笔非常好.作 ...
- cshop是什么开发语言_C语言是用什么语言编写出来的?
谢邀 参考 Dennis M. Ritchie 写的 The Development of the C Language:Chistory,C 语言诞生的基本过程就是 Ken Thomson 不满意 ...
- java经典100例算法题_10道java经典算法题,每一题都能帮你提升java水平!
JAVA经典算法题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子 ...
- 翻手算法php,PHP各种常见经典算法总结【排序、查找、翻转等】
本文实例讲述了php各种常见经典算法.分享给大家供大家参考,具体如下: 冒泡排序算法 public function test() { $arr = array(43, 54, 62, 21, 66, ...
- java经典问题算法大全_10道java经典算法!每一题都能提升你的java能力!
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 10道java经典算法! [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位. ...
- perm函数c语言_C语言之递归排序算法
一.什么是递归算法? 递归算法是把问题转化为规模缩小了的同类问题的子问题.然后递归调用函数(或过程)来表示问题的解. 一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数). ...
- 算法精解_C语言 链表_单链表(接口定义+类型实现)
链表可以说是一种最为基础的数据结构.链表由一组元素以一种特定的顺序组合或链接而成,在维护数据的集合时很有用.这一点同我们常用的数组很相似.然而,链表在很多情况下比数组更有优势.特别是在执行插入和删除操 ...
最新文章
- Android Studio 填坑指南
- iphone11系统输入框的光标位置不正常
- C++ public、protected、private区别
- 如何在前端进行短信接口和语音验证接口的使用
- Android 自定义View以及ValueAnimator学习
- 求你了,别再随便打日志了,教你动态修改日志级别!
- 中金:基金投顾试点扩容,买方时代已至
- 使用swix反编译swf文件修改版权
- 【计算机系统组成】IO设备知识要点
- 吝啬SAT问题是NP完全问题的证明
- 右脑图像记忆法原理和方法入门
- P1336 课题选择
- 实验物理与工业控制系统---EPICS
- 使用C#编写17种Hello World程序(初学者C#测试石)
- Matplotlib不显示中文解决办法
- C++ 函数反汇编跟踪以及栈结构分析
- 同时删除多个 Txt 文本文档的前几行
- C语言人机大战之三字棋博弈
- pip安装pytorch清华_通过 pip 安装 pytorch
- 荣耀7x刷android10,华为荣耀畅玩7X官方固件rom包_荣耀畅玩7X完整系统升级包
热门文章
- 最早做无糖茶的统一茶里王,是怎样错过年轻人的?
- 银行IT迎“高景气”时代,宇信科技如何领跑行业?
- 赢得市值,失去人心,美团觉得划算吗?
- python 阿里云短信接口_阿里云短信PythonSDK的用法
- mysql远程服务器返回错误404未找到_远程服务器返回错误: 404错误、远程服务器返回错误:500错误、 HttpWebResponse远程服务器返回错误:(404、500) 错误。...
- 从0开始利用宝塔linux面板+WordPress一键部署搭建个人的博客介绍
- 使用python装饰器计算函数运行时间的实例
- Python 的类其实是一个特殊的对象
- Python命令行之旅:使用argparse实现git命令
- Linux是否兼容windows跨区卷,简单卷与跨区卷的区别介绍