Python의 DFS 템플릿
8148 단어 pythonalgorithms
DFS란 무엇입니까?
DFS(깊이 우선 검색)는 각 분기에서 가능한 한 멀리 탐색하는 트리/그래프 순회 알고리즘입니다.
위 트리의 DFS 순회는 다음과 같습니다.
[0, 1, 3, 4, 2, 5 ,6]
DFS 애플리케이션
DFS의 일부 응용 프로그램은 다음과 같습니다.
템플릿
다음 템플릿을 사용하여 트리/그래프를 간단히 탐색할 수 있습니다.
이진 트리의 DFS
def do_something(root):
pass
def dfs(root):
if not root:
return
do_something(root)
dfs(root.left)
dfs(root.right)
N항 트리의 DFS
def do_something(root):
pass
def get_children(root):
pass
def dfs(root):
if not root:
return
do_something(root)
for child in get_children(root):
dfs(child)
그래프의 DFS
visited = set()
def do_something(root):
pass
def get_neighbors(root):
pass
def dfs(root, visited):
if root in visited:
return
do_something(root)
visited.add(neighbor)
for neighbor in get_neighbors(root):
dfs(neighbor, visited)
간단한 순회 외에도 자식에서 부모로 값을 전달하거나(반환 값 사용) 부모에서 자식으로 값을 전달할 수 있습니다(함수 매개 변수 사용).
값을 위로 넘기는 예(반환값)
N-ary 트리의 최대 깊이 찾기
def get_children(root):
pass
def max_depth(root):
if not root:
return 0
depth = 0
for child in get_children(root):
depth = max(depth, max_depth(child))
return depth + 1
값을 아래로 전달하는 예(함수 매개변수)
이진 트리의 인쇄 경로
def dfs_path(root, res):
if not root:
return
res.append(root)
dfs_path(root.left, res)
dfs_path(root.right, res)
역추적도 DFS의 변형입니다. 역추적은 전체 트리/그래프를 탐색하지 않습니다. 대신 역추적은 솔루션으로 이어질 수 없는 분기 탐색을 중지합니다.
역추적은 종종 퍼즐이나 조합 문제를 해결하는 데 사용될 수 있습니다.
역추적 템플릿
def condition():
pass
def do_something(root):
pass
def get_children(root):
pass
def backtrack(root):
if not condition():
return
do_something(root)
for child in get_children(root):
backtrack(child)
Reference
이 문제에 관하여(Python의 DFS 템플릿), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alexhanbich/dfs-python-templates-4g7l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)