【发布时间】:2014-05-31 13:03:28
【问题描述】:
我正在尝试生成完整的井字游戏树。我假设玩家 1 为 1,玩家 2 为 -1。我使用了以下代码:
nodeDict = {}
nodescore = {}
succDict = {}
def buildTree(S, p, node):
succ = []
succScore = []
if move_was_winning_move(S, p):
print "It is a winning move for\n",S,p,node
return
elif move_was_winning_move(S, p*-1):
print "It is a winning move for\n",S,p*-1,node
return
elif not move_still_possible(S):
return
# if S is not terminal: switch player & compute successors
if not move_was_winning_move(S, p):
rs, cs = np.where(S==0)
for j in range(rs.size):
Ssucc = np.copy(S)
Ssucc[rs[j],cs[j]] = p
newnode = max(nodeDict.keys())+1
nodeDict[newnode] = Ssucc
succ.append(newnode)
succDict[node] = succ
nextPlayer = p * (-1)
for s in succ:
buildTree(nodeDict[s], nextPlayer, s)
return
当我从一个状态开始代码时:
0 0 0
0 0 0
0 0 0
运行时间过长。我发现,最多应该有 9 个!节点数,运行时间不宜过长。
如果我的代码有误,谁能告诉我?或者有什么办法可以优化递归?
【问题讨论】:
-
出于好奇,以
nextPlayer = p...开头的代码在您的本地文件中是否正确缩进? -
什么是“太长”?因为它是9!并且每次迭代中的计算都不是微不足道的(可能需要一毫秒或更长时间),它可以轻松运行数分钟。
-
它像一小时一样运行。我觉得,这是在无限情况下的某种方式。
标签: python recursion tic-tac-toe