最短路径算法递归

时间:2012-08-15 13:57:51

标签: python recursion shortest-path

作为编程练习,我试图用Python解决一个益智游戏。为此,我使用递归算法,我认为这是一个深度优先搜索实现。我的问题是我得到一个运行时错误,达到最大递归限制,我还没弄清楚如何解决它。

我看过关于游戏和算法的不同帖子,但不是在这个环境中重新编码,我希望能够对我所写的内容有所了解。 所以这是我的代码的伪简化版本。

# Keep track of paths that I have found for given states. 
best_paths = dict()

def find_path(state, previous_states = set()):

  # The output is a tuple of the length of the path and the path.
  if state in previous_states:
    return (infty,None)
  previous_states = copy and update with state

  if state in target_states: 
    best_paths[state] = (0,[])

  if state in best_paths:
    return best_paths[state]

  possible_moves = set((piece,spaces) that can be moved)
  (shortest_moves,shortest_path) = (infty,None)
  for (piece,spaces) in possible_moves:
    move_piece(piece,spaces)
    try_state = the resulting state after moving the piece
    (try_moves,try_path) = find_path(try_state,previous_states)

    if try_moves < shortest_moves:
      shortest_moves = try_moves + 1
      shortest_path  = try_path + [(piece,spaces)]

    # Undo the move for the next call
    move_piece(piece,-spaces)

  if shortest_moves < infty:
    best_paths[state] = shortest_path

  return (best_moves, shortest_path)

所以我的问题是如果在for循环之外返回是什么导致递归到达最大值?
谢谢你的帮助。

    -

1 个答案:

答案 0 :(得分:0)

如果您遇到超出递归深度的异常,则要么遇到代码问题,要么需要不同的算法。看起来你的算法是O(N * N),其中N是节点数。 N不需要非常大就能达到极限。

有更好的解决问题的方法。