中国象棋的着法生成: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 @ 2012-09-03 09:34  申龙斌的程序人生  阅读(1698)  评论(4编辑  收藏  举报