中国象棋的着法生成: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

 

     
 

posted @   申龙斌的程序人生  阅读(1712)  评论(4编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2011-09-03 CGM格式解析
2009-09-03 2009年职工象棋比赛 第二轮 中炮对单提马
点击右上角即可分享
微信分享提示