Почему это работает, когда кажется, что отсутствуют некоторые обратные вызовы (DFS)? - PullRequest
0 голосов
/ 04 февраля 2020
def dfs(s,d):
  def dfs_helper(s,d):
    if s==d:
      return True
    if s in visited:
      return False
    visited.add(s)
    for c in graph[s]:
      dfs_helper(c,d)
    return False
  visited = set()
  return dfs_helper(s,d)

Я не уверен, почему приведенный выше код правильный. Я видел это в газете, но не должен ли он сказать return dfs_helper(c,d) вместо просто dfs_helper(c,d) при прохождении по всем соседям? В противном случае, как мы можем вернуть что-либо до конца, так как я думал, что возврат приведет вас только на один уровень к непосредственному вызывающему.

Т.е. если у нас есть граф с ребрами (A, B), (A, C) и (C, D) я понимаю, почему dfs_helper(D,D) возвращает True, но когда мы запускаем dfs_helper(C,D), мы просто запускаем dfs_helper(D,D), но мы НЕ ВОЗВРАЩАЕМСЯ dfs_helper(D,D), поэтому True не делает пройти назад. Разве это не так? А если нет, то почему это так?

1 Ответ

0 голосов
/ 04 февраля 2020

Исправлено это. Оказывается, я был на правильном пути.

Мне нужно было перейти с

for c in graph[s]:
  dfs_helper(c,d)

на

for c in graph[s]:
  if dfs_helper(c,d): return True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...