前言:
这次的回溯算法实在是太有意思了,不过刚刚接触的时候确实不容理解,极小极大策略,αβ枝减看了好几遍才明白整个过程。实现的时候又发现还有细节不明白,想明白之后对于整体的认识又加深了一步。
编码的过程反而没有太大的问题,只有再判断平局的时候,写错了判断的条件,导致没有平局存在,花了点时间调试就解决了。
我的github:
我实现的代码全部贴在我的github中,欢迎大家去参观。
https://github.com/YinWenAtBIT
介绍:
三连棋介绍:
一、规则:
游戏双方交替下子,知道棋盘上没有空余格或者直到分出胜负。胜利条件是任意一方棋子横竖斜练成一条线。未达成胜利则是平局。
二、算法思想:
1. 使用回溯法思想,每个点落子之后,可以达到的最优结果返回,将所有可以落子的格子都考察过后,选择其中最符合自己要求的点。
2. 极小极大策略,设电脑胜利为1,平局为0, 人类胜利为-1, 那么电脑要找出所有点之中极大的那个,人类要找出所有点中极小的那个。
3. 使用递归的方式来下棋,轮到电脑下棋时,电脑选一个点,然后模拟人类下棋,再电脑下棋,直到分出胜负或者平局,模拟人类和电脑下棋时,遵循各自的极小极大策略。
三、 核心算法伪代码:
电脑思考伪代码中,在落子之前,先判断上一轮模拟人的落子是否已经出了结果,没有出结果则继续寻找最优落子点。