tic tac toe中的端子板数量

时间:2015-04-13 18:35:43

标签: combinatorics tic-tac-toe game-theory

我试图将tic-tac-toe的问题形式化为有限的地平线决策问题。我想要计算有多少不同的终端板(终端板是满的或有赢家的板)。明显的上限是9!,但我正在寻找确切的值。我找到了这个数字,但我真正关心的是获得它的方法。

欢迎任何帮助

谢谢

1 个答案:

答案 0 :(得分:0)

Tic-tac-toe只有9个位置,很容易创造所有可能的比赛位置。这是一个简单的python代码,可以创建所有可能的移动,并以两个集合中的方式存储获胜者和没有获胜者的状态。

游戏状态是一个长度为9的字符串,其中space为空字段,0为第一个玩家,1为第二个玩家。

finished_states = set()
full_table_states = set()

def is_finished(state, player):
    player = str(player)
    return any( (player == state[i*3+0] == state[i*3+1] == state[i*3+2]) for i in xrange(3) ) or \
        any((player == state[i] == state[3+i] == state[6+i]) for i in xrange(3)) or \
        (player == state[0] == state[4] == state[8]) or \
        (player == state[2] == state[4] == state[6])

def play(state, player):
    for i, s in enumerate(state):
        if s == ' ':
            new_state = state[:i] + str(player) + state[i+1:]
            if is_finished(new_state, player):
                finished_states.add(new_state)
            elif ' ' not in new_state:
                full_table_states.add(new_state)
            else:
                play(new_state, 1-player)

play(' '*9, 0)
print len(finished_states), len(full_table_states)

输出是:

942 16