跳棋算法策略

棋子跳动算法
该算法在ChessBoard.CanJumpTo函数中实现

? 找出一个棋子所有可走位置,并建成数据结构“图”的形式
这个算法有点象图的广度优先遍历算法。文字说明如下:
1.把当前棋子坐标加入“图”中。
2.从当前棋子位置出发,从六个方向查找棋子可跳的位置,
3.如果第2步找到坐标没有加入“图”中,就把这些坐标加入“图”中去。
4.从第3步刚加入“图”中的坐标出发,继续执行第2步。一直到没有坐标加入“图”中为止。
最短路径搜索
当用户指定下棋位置以后,还要计算出棋子从当前位置到目标位置的最短路径,为游戏的播放棋子走动动画作准备。这个算法还是有点象图的广度优先遍历算法,文字说明如下:
1.把所有坐标的“权值”设为-1
2.把当前棋子坐标的“权值”设为0。
3.从当前棋子位置出发,查找棋子可跳的位置。
3.如果第3步找到坐标没有“权值”为-1,就把这些坐标的“权值”在上一坐标的基础上加1。
4.从第4步刚设定“权值”的坐标出发,继续执行第2步。一直到所有坐标都设定“权值”为止。
5.从目标位置开始,倒退着开始查找,每次查找的位置应该是“权值”比当前位置减小1的坐标。一直找到起始位置。这样就找到最短路径了。
这些的都是数据结构基础知识,有点抽象,只要理解加想象就没有问题了。哦,上次“平安”考试中有一个题目:什么是前序遍厉,什么是后序遍厉,我真的记不住。数据结构的知识能理解能运用,考试却不能得分,冤呀。

5. 计算机下棋策略

这是最难设计的部分,人与计算机的思维方式完全不同,如何把人的下棋思路表示计算机可运算的数据结构,这是比较困难的,要不然人工智能这么多年一直没有突破性进展呢?
? 两坐标间距离计算方法

计算机下棋策略主要有以下几个方面:

  • 计算出己方所有可能走法
  • 选出一个跳得最远(尽快让自己获胜)的棋子和走法。
  • 选择一个最可能阻碍对方前行的棋子和走法。
  • 尽可能选择可为下一步提供最有利条件的棋子和走法
  • 对以上几项做综合分析,得出较好的走法。
时间: 2024-12-12 17:32:42

跳棋算法策略的相关文章

算法策略的总结

策略是面向问题的,算法是面向实现的. 一.不同算法策略特点小结 1.贪心策略 贪心策略一方面是求解过程比较简单的算法,另一方面它又是对能适用问题的条件要求最严格(即适用范围很小)的算法. 贪心策略解决问题是按一定顺序,在只考虑当前局部信息的情况下,就做出一定的决策,最终得出问题的解. 即:通过局部最优决策能得到全局最优决策 2.递推策略 递推也是由当前问题的逐步解决从而得到整个问题的解,依赖于信息间本身的递推关系,每一步不需要决策参与到算法中,更多用于计算 3.递归策略 递归常常用于分治算法.动

内存布局------c++程序设计基础、编程抽象与算法策略

图中给出了在一个典型c++程序中如何组织内存的框架.程序中的指令(在底层都是按位存储的)和全局变量往往被存储在静态去(static area),该区域位于地址编址号较小的接近机器地址空间的开始处.该区域所分配的内存量在程序运行期间不会发生改变. 内存中的最高地址区表示栈区(stack area).当你的程序每调用一个函数或者方法,计算机就会在这个内存区创建一个新的栈帧.当函数返回时,所创建的栈帧会被撤销,以为后续的函数调用所需的栈帧释放内存. 处于栈区和静态区之间的内存区域被称为堆区(heap

声明函数指针------c++程序设计基础、编程抽象与算法策略

#include<iostream> using namespace std; double a(double aa) { return aa; } int main() {int aa = 9; a(1.0); double(*fn)(double) = a;; cout << a(1.0)<<endl; cout << fn(1.0) << endl; cout << fn << endl; cout <<

11算法策略之动态规划

动态规划 在动态规划算法策略中,体现在它的决策不是线性的而是全面考虑不同的情况分别进行决策, 并通过多阶段决策来最终解决问题.在各个阶段采取决策后, 会不断决策出新的数据,直到找到最优解.每次决策依赖于当前状态, 又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,故有"动态"的含义.所以,这种多阶段决策最优化的解决问题的过程称为动态规划. [例1]数塔问题 有形如图4-11所示的一个数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路

五大常见算法策略——递归与分治策略

摘要:递归与分治策略是五大常见算法策略之一,分治策略的思想就是分而治之,即先将一个规模较大的大问题分解成若干个规模较小的小问题,再对这些小问题进行解决,得到的解,在将其组合起来得到最终的解.而分治与递归很多情况下都是一起结合使用的,能发挥出奇效(1+1>2),这篇文章我们将先从递归说起,再逐渐向分治过渡,主要讲解方式是通过9个例题来说明问题的,问题都是根据难度由简到难,由浅入深,对递归与分治能有个大概的了解雏形,当然最重要还是要做大量练习才能掌握. 1.递归 我们第一次接触递归一般都是在初学C语

跳棋算法

摘要:介绍了跳棋游戏的游戏功能及程序总体逻辑,在此基础上深入探讨了跳棋游戏中的查询棋子可跳动位置.最佳路径提示.电脑落子和玩家落子的算法,通过这些算法实现游戏按规则有序的进行.中国论文网 http://www.xzbu.com/8/view-3599881.htm 关键词:游戏设计;跳棋游戏 中图分类号:TP311 文献标识码:A 文章编号:1007-9599 (2012) 13-0000-02 一.引言 电脑游戏软件的产生,使得计算机的娱乐功能产生了质的提升,进一步加快了计算机的普及.当代快节

对复合(协作)算法/策略的封装方法——装饰模式总结

前言 装饰模式顾名思义就是在不改变原对象的前提下,将新功能优雅的附加(装饰)到该对象上,可以实现对复合算法(策略)的优雅封装.对需要协作的算法(策略)进行有机组合. 装饰模式和策略模式用法类似,但是也有明显区别——策略模式运行时只能运行一个算法,且其各个算法(算法族)之间必须相互独立,不能有联系,装饰模式没有这些约束. 装饰模式和策略模式一样,也是对继承的一种替代方案——使用对象组合的方式,做到运行时装饰对象,从而优雅的替代死板的继承. 另外,装饰模式是对象的结构型模式. 再议继承的缺陷 在策略

10算法策略之贪婪法

贪婪算法 贪婪法又叫登山法, 它的根本思想是逐步到达山顶,即逐步获得最优解.贪婪算法没有固定的算法框架,算法设计的关键是贪婪策略的选择.一定要注意,选择的贪婪策略要具有无后向性.某状态以后的过程和不会影响以前的状态,只与当前状态或以前的状态有关,称这种特性为无后效性. 可绝对贪婪问题 [例1]键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小. 输入数据均不需判错.输出应包括所去掉的数字的位

五大常用算法

http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html 分治算法 一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)-- 任何一个可以用计