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 не делает пройти назад. Разве это не так? А если нет, то почему это так?