中国象棋的着法生成:perft统计结果
国际象棋引擎中有一个著名的perft程序,可以根据某一个盘面,递归分析可生成的着法个数,统计出其中吃子、将军、将死的个数,用这些数据来验证着法生成的正确性。
perft的代码很简单,就是一个递归调用:
U64 Perft(int depth)
{
Move move_list[256];
int n_moves, i;
U64 nodes = 0;
if (depth == 0) return 1;
n_moves = MoveGenerator::GenerateAllMoveList(*this, move_list);
for (i = 0; i < n_moves; i++) {
MakeMove(move_list[i]);
nodes += Perft(depth - 1);
UnmakeMove(move_list[i]);
}
return nodes;
}
google了中国象棋的perft结果,但没有发现一个网页。
下表将慢慢列出我的统计结果和一些爱好者的补充结果,请广大爱好者们随时补充。
注:这里的统计结果里包含将军判断,即某一着法生成后,如果仍处于被将军状态,则不算入着法列表中。
1、初始局面:
迭代深度 |
着法个数 |
吃子 |
将军 |
将死 |
1 |
44 |
0 |
0 |
|
2 |
1920 |
期待大家提供结果 |
期待大家提供结果 |
期待大家提供结果 |
3 |
79666 |
期待大家提供结果 |
期待大家提供结果 |
期待大家提供结果 |
4 |
3290240 |
期待大家提供结果 |
期待大家提供结果 |
期待大家提供结果 |
5 |
133312995 |
|||
6 |
5392831844 |
|||
7 |
217154523878 wangmao.li提供 |
|||
8 |
期待大家提供结果 |
|||
9 |
期待大家提供结果 |
2、FEN局面:
3akabR1/9/2n1b4/p1R1p3p/6P2/9/P1P5P/4C4/4c4/2B1KAB2 r
迭代深度 |
着法个数 |
吃子 |
将军 |
将死 |
1 |
41 | |||
2 |
792 |
|
||
3 |
33531 |
|
||
4 |
721197 |
|
||
5 |
30813077 |
|||
6 |
|
|||
7 |
|
----==== Email: slofslb (GTD) qq.com 请将(GTD)换成@ ====----
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
作者:申龙斌的程序人生
---- 魔方、桥牌、象棋、游戏人生...
---- BASIC、C++、JAVA、C#、Haskell、Objective-C、Open Inventor、程序人生...
---- GTD伴我实现人生目标
---- 区块链生存训练
---- 用欧拉计划学Rust编程
---- 申龙斌的读书笔记(2011-2019)
----