作为一名初学程序员,我不知道如何在概念上考虑暴力破解。我的思绪无法理解如何编写将尝试各种可能性的代码。我的答案是递归,但正如您将在下面看到的那样,我失败了。
如果您需要full source
我有一个我想解决的问题。这是一个代码片段(还有其他功能,但没有理由在这里包含它们,它们只是做背景工作):
def initiate(seen):
step_segment = []
STATS = [250,0,0,0,13,0]
if len(seen) >= 256: # when to escape the recursion
return seen
while (len(step_segment)) < 128:
step_segment, STATS = take_step(step_segment, STATS)
if STATS[5] == "B": # if there is a battle
if STATS[0] in seen: # if battle has been done before
status = seen.index(STATS[0]) # get battle status:
status += 1 # which is next to step_id (= G or B)
if seen[status] == "B": # for seen battles, try Glitch ("G")
step_segment = do_glitch(step_segment, STATS)
else:
step_segment, STATS = do_fight(step_segment, STATS) # fight
seen = seen + [STATS[0],STATS[5]]
time = get_frames(step_segment)
print "\nTime:", time
print seen
return initiate(seen)
目标:我想通过细分生成每个可能决策的列表,以及需要多长时间。
说明
我会迈出一步(只有一个方向:向前)。每次我迈出一步,我的统计数据都会更新。这需要一步并更新统计信息:step_segment, STATS = take_step(step_segment, STATS)
保留所采取的步骤列表以及统计信息
step_segment
。这是我可以撤消&#39;任意数量的
步骤,如果我想。撤消步骤调用函数:
step_segment, STATS = undo_step(step_segment, STATS)
我可以看到我目前的路线走了多长时间:time = frames(step_segment)
。
在某些时候,我会进入一场战斗。我什么时候开始战斗
STATS[5] == "B"
当有战斗我必须做出决定时,我只有两个选择: i。对抗 战斗(B),或 ii。逃跑故障(G)。
如果我想打架,我会:step_segment = do_fight(step_segment, STATS)
。这也记录了我选择与step_segment
中的统计数据一起战斗。 (所以我可以撤消它,如果我想的话。)
如果我想跑掉毛刺,我会:step_segment = do_glitch(step_segment,STATS)
。
我希望看到Glitch&amp; amp;战斗(当我到达战斗时,只有两个选择)。
目前,我的代码非常糟糕,并没有尝试所有可能性。我真的不知道如何为所有可能性编码。
所以,这就是我在这里的原因。在面对决策时,如何实现尝试所有可能性的方法?
我理解这个问题具有指数级别的可能性,但幸运的是,最大数量非常小(<1024)。
我已阅读有关树遍历的内容,但我不知道如何将我的问题放入该格式中。例如,我不知道什么是节点&#39;会在我的问题。我实际上不知道会发生什么......这就是我要问的原因。