我需要尝试所有可能的路径,每次达到某一点时都会分支。这个问题有128种可能的路径,因此无需担心指数缩放。
以下是我在Python中的模板(Step
对象使用next()
返回下一步):
from row_maker_inlined import Step
def main():
initial_stats = {'n':1,'step':250,'o':13,'i':113,'dng':0,'inp':'Empty'}
player = Step(initial_stats)
end_of_field = 128
# Walk until reaching an encounter:
while player.step['n'] < end_of_field:
player.next()
if player.step['enc']:
print 'An encounter has been reached.'
# Perform an input on an encounter step:
player.input = 'B'
# Make a branch of player?
# perform this on the branch:
# player.input = 'G'
# Keep doing this, and branching on each encounter, until the end is reached.
如您所见,问题相当简单。作为一名初学程序员,我不知道如何解决这样的问题。
我相信我可能需要使用递归才能保持分支。但我真的只是不明白如何使用递归或其他任何东西“制作分支”。
我应该关注什么样的解决方案?
答案 0 :(得分:0)
您应该关注搜索算法,如呼吸优先搜索(BFS)和深度优先搜索(DFS)。
维基百科将此作为BFS的伪代码实现:
procedure BFS(G, v) is
let Q be a queue
Q.enqueue(v)
label v as discovered
while Q is not empty
v← Q.dequeue()
for all edges from v to w in G.adjacentEdges(v) do
if w is not labeled as discovered
Q.enqueue(w)
label w as discovered
基本上,当您遇到“遭遇”时,您希望在结束时将此点添加到队列中。然后从队列中选择FIRST元素并进行探索,将所有子元素放入队列,依此类推。这是一个非递归的解决方案,它足够简单,可以做你想要的。
DFS类似,但不是从队列中选择FIRST元素,而是选择最后一个。这使得你可以在回到探索另一个之前探索一条到死路的路径。
祝你好运!