奥赛罗Minimax算法不起作用

时间:2017-06-05 01:52:33

标签: c algorithm minimax

我正在尝试制作一个minimax算法,但我的函数没有返回正确的位置。它返回最深的节点。我希望它能回归最好的举动。这是我的代码:

pos minimax(game* g, strategy_config sc)
{
    int points = 0;
    sc.minimax_config.heuristic(g, sc.minimax_config.hc);
    pos p, p2;
    int search_depth = sc.minimax_config.ply;
    for (p.r = 0; p.r < g->b->nrows; p.r++) 
    {
        for (p.c = 0; p.c < g->b->ncols; p.c++) 
        {
            game* copy = g;
            apply_move(copy, p);
            if (sc.minimax_config.heuristic(copy, sc.minimax_config.hc) 
                > points && sc.minimax_config.ply > 0)
            {
                if (sc.minimax_config.ply == search_depth) 
                {
                    p2 = p;
                }
                sc.minimax_config.ply = sc.minimax_config.ply - 1;
                minimax(copy, sc);
            }
        }
    }
    return p2;
}

以下是相关结构:

struct edge_corner_weight {
    unsigned int edge_weight;
    unsigned int corner_weight;
};

union heuristic_config {
    unsigned int edge_weight;
    struct edge_corner_weight edge_corner_weight;
};

typedef union heuristic_config heuristic_config;

struct minimax_config {
    int (*heuristic)(game*, heuristic_config);
    heuristic_config hc;
    unsigned int ply;
};

typedef struct minimax_config minimax_config;

union strategy_config {
    minimax_config minimax_config;
};

0 个答案:

没有答案