中国象棋多少点位?
简单说,中国象棋棋盘共有九十九条线(其实是一百零一条,因为盘面横竖各十一个点),每一个点在棋盘上都有其唯一的坐标,所以“中国象棋多少点位”这个问题等价于问“中国象棋有多少个点” 答主本人不是专业棋手也不是计算机相关专业,只是平时下象棋觉得有点无聊,用Python实现了自动走棋并以此为基础研究了一些相关问题,包括这一问一答。所以这里尽量把问题用比较通俗的语言解释一下,如果涉及专业知识,会注明出处。还望大家多多指点! 为了便于展示,这里用六边形来模拟中国象棋的棋盘——实际上可以看成无数平行四边形,这样所有点和线都变成了一一对应的关系了。
为了方便描述坐标的数值和方向,先给出几个变量: player_row:本方(红)炮座标,取值范围[0,11] player_col:本方(红)炮列数,取值范围[0,11} opponent_row:对方(黑)炮座标,同player_row opponent_col:对方(黑)炮列数,同player_col 现在我们可以给每个点赋值了: 棋盘的每一列每一行都有一个“起点”,这个起点我们标记为(0,0),然后按照上下左右移动的原则,给每颗棋子赋予一个独一无二的坐标。比如我们给这盘棋的“马走日”规划一条路径: 所以只要按照同样的方法走完每一步,这盘棋就能终局;而它的终点坐标就是终局坐标。这里我们给每一步加一点延时,让电脑有思考的时间,实际下棋时是没有这么慢的: 每一步的路线我们都记录下来,最后就得到了这盘棋从开始到结束的完整轨迹——这是一大堆整数集合。
现在来分析一下这些整数集合的特点。这盘棋一共有4986732种走法,由于我们是随机下棋的,所以这4986732种走法的组合恰好是这盘棋的所有可能结局。为了便于查询,我们把所有的走法按顺序排列组成一个列表。 那么现在的问题就变成了一个数学问题:如何搜索这4986732种情况的可能性?
我们首先排除掉一些明显不可能的情况——比如对方立刻反击我方的一着棋,这种情况出现的概率非常小,可以不计。接着我们假设双方都按一定顺序下一堆无用的子,直到某一时刻,其中一方的某个子起到了作用,这种情况出现的概率应该和我上面画的路径差不多吧?!于是我们就可以把这种种可能性的走法过滤掉大部分——剩下的都是些微乎其微的概率,完全可以忽略。 最后结果如下(前一百种): 这个结果的排序是按照概率大小排序的,也就是说如果两个人轮流下一盘象棋,且第一次落子必赢的情况下,第一个人有百分之九十的机会赢得这盘棋。