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

原创 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++代码:

 

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

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

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

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

Knight Tour 骑士走棋盘算法(附代码)

骑士的走法为国际象棋的走法,骑士可以由任何一个位置出发,要求走完所有的位置。 基本情况下是可以使用递归,但是在递归维度大的时候,时间复杂度很高,效率很低。 下面介绍一个聪明的解法:...

马踏棋盘算法(骑士周游问题)

马踏棋盘算法(骑士周游问题) 定义:将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格。 算法:如图...

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

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

经典游戏算法之走迷宫

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

7款经典游戏 诠释高级算法精髓

入门要求: 使用Java Swing进行图形编程 课程导向 排序可序化 选择排序 插入排序 归并排序 快速排序 堆排序 概率模拟问题 蒙特卡洛算法走迷宫 DFS BFS 非递归的BFS 扫雷...

经典游戏算法之八皇后

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

7款经典游戏 诠释高级算法精髓

第1章 欢迎来到看得见的算法 欢迎来到看得见的算法。这个课程将以独一无二的方式,向你展示算法究竟有什么用,在实际项目中能做什么,并向你一一展示通过学习这个课程,你将能够制作出多么酷炫的程序:) 第...

经典游戏算法

  • 2008年02月29日 09:45
  • 170KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典游戏算法之骑士走棋盘
举报原因:
原因补充:

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