经典游戏算法之骑士走棋盘

原创 2011年01月14日 10:49:00

问题描述:中国象棋中,马可以走遍棋盘上的任何角落.国际象棋中,也同样有这样的说法:骑士可以走遍棋盘上的每个格子.现在的问题是:在一个8x8的棋盘上,从任意位置开始,骑士如何可以不重复地走完所有的位置?

 

骑士在每一步都有8种可能的下一步走法(边界上除外),为了提高效率,可以选择所要走的下一步为下一步要选择时所能走的步数最少的一步.

 

函数说明:

bool travel(int board[][SIZE],int x,int y);        //遍历函数,传入数组表示棋盘,x,y表示骑士的初始位置坐标

具体步骤:

首先记录当前位置走的次序,然后遍历棋盘,得到可能的下一跳数目,通过min函数找到最合适的下一跳,记录下一跳位置走的次序.如果能够遍历完成,返回true表示骑士不重复的走完棋盘.

int possible(int board[][SIZE],int *nexti,int *nextj,int x,int y);//计算下一步的可能方向,传入数组表示棋盘,数组记录多个下一步可能方向,x,y为当前骑士位置坐标

具体步骤:

将所有的下一跳以坐标表示,若当前位置上下一跳的元素值为0表示未走过为一种可能方向,下一跳数组记录下一跳坐标,计数器累加,返回计数器

int min(int board[][SIZE],int *nexti,int *nextj,int count);  //从多个可能方向中找出下一方向数最少的方向

具体步骤:

在所有的可能的方向中遍历,分别计算下一跳的数目,取其中最小数目的方向,返回值表示下一跳数组的下标

 

C++代码:

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

经典游戏算法之八皇后

寒假归来,继续征程。继续总结这系列经典的游戏算法。问题描述:       八皇后是个古老而有趣的游戏,是由高斯于1850年首先提出的。要求在国际象棋的棋盘上放置八个皇后,使其不能相互攻击,即任意两个皇...

数据结构经典算法(7)骑士走棋盘

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

经典游戏算法之走迷宫

问题描述:使用二维数组构建迷宫,用2代表墙壁,1代表行走路径,0表示可走路径,找出从起点到终点的路径。 函数说明: bool visit_maze(int maze[][SIZE],int ,in...

经典游戏算法

  • 2008-02-29 09:45
  • 170KB
  • 下载

算法思考--------骑士走棋盘(c语言)

一、规则说明              骑士可以从任意一个位置出发,走法和中国象棋的"马"走法类似,"走日"。问:如何走完所有的位置 二、解法      ...

经典游戏问题算法集

  • 2008-06-10 16:29
  • 28KB
  • 下载

【C】少年时代的经典游戏:三子棋

刚接到这个题目的时候,感觉用个数组并不难。 然而写起来,光是判断能否从一个点到另一个点就用了N次if else 语句 最后出的问题是,一个点不能覆盖另一个点,还要加一个判断 好了,这个问题解决了,又来...

经典游戏命令与征服-红色警戒在线网页版

命令与征服(Command & Conquer)对于许多人来说可能不是很熟悉,但是如果说到红色警戒(命令与征服的一个系列)的话,那么应该无人不知无人不晓。现在国外的强人通过使用js和最新的html5网...

【Java】十款经典游戏的Java版本(开源)

开源Java小游戏 前言 看到标题可能有人要笑我,用Java写游戏?没办法,毕竟无论学什么语言我们都希望它能做出好玩有趣的应用。对于初学者来说,能做出个小游戏玩玩也是很大的学习动力嘛。下面就给...

经典游戏---贪吃蛇从C++代码实现

本文转载自:http://blog.csdn.net/shawn_hou/article/details/27734217 1.   题目描述 小时候都玩过贪吃蛇这个经典的小游戏,在我们的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)