できるだけ深く進んで行き止まりだったらバックトラックする方法
特徴
動作
実装
スタック
def dfs(graph, start):
visited = set()
stack = [start]
while stack:
node = stack.pop()
if node not in visited:
visited.add(node)
print(node)
stack.extend(reversed(graph[node]))
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'D'],
'D': ['B', 'C', 'F'],
'E': ['B', 'F'],
'F': ['D', 'E'],
}
dfs(graph, 'A')
再帰
def rdfs(graph, node, visited):
if node in visited:
return
visited.add(node)
print(node)
for neighbor in graph[node]:
rdfs(graph, neighbor, visited)
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'D'],
'D': ['B', 'C', 'F'],
'E': ['B', 'F'],
'F': ['D', 'E'],
}
visited = set()
rdfs(graph, 'A', visited)
グラフ