Depth-First Search (recursive)
code: python
# N: 頂点 M: 辺
# O(N + M), O(N + M)
def dfs(graph, now, visited=None, res=None):
if visited is None:
visited = set()
if res is None:
res = []
if now not in visited:
visited.add(now)
res.append(now)
for next in graphnow:
dfs(graph, next, visited, res)
return res
graph = {
'A': 'B', 'C', 'D',
'B': 'A', 'E', 'F',
'C': 'A', 'H',
'D': 'A', 'I', 'J',
'E': 'B', 'K',
'F': 'B',
'G': 'H',
'H': 'C', 'G',
'I': 'D',
'J': 'D', 'L',
'K': 'E',
'L': 'J'
}
def test_dfs():
assert dfs(graph, 'A') == 'A', 'B', 'E', 'K', 'F', 'C', 'H', 'G', 'D', 'I', 'J', 'L'