흰 스타렉스에서 내가 내리지

[DFS, 백트래킹] 순열 구하기 본문

Algorithm

[DFS, 백트래킹] 순열 구하기

주씨. 2021. 12. 30. 22:38
728x90
arr = [1, 2, 3]

def dfs(arr, sol, visited):
    # Base Case
    if len(arr) == len(sol):
        print(sol)
        return
    
    for i in range(len(arr)):
        if not visited[i]:	# 노드에서 같은 원소가 중복되는 경우 - 백트래킹
            visited[i] = True
            sol.append(arr[i])
            dfs(arr, sol, visited)
            sol.pop()	#  노드에서 하나의 순열을 완성한 경우 - 백트래킹
            visited[i] = False

dfs(arr, [], [False]*len(arr))



# 실행 결과
# [1, 2, 3]
# [1, 3, 2]
# [2, 1, 3]
# [2, 3, 1]
# [3, 1, 2]
# [3, 2, 1]

백트래킹 조건

1. 노드에서 같은 원소가 중복되는 경우 

  • 가능한 순열이 아니므로 백트래킹

2. 노드에서 하나의 순열을 완성한 경우 

  • 하나의 해를 찾음. 다시 자신의 스택프레임으로 돌아왔다면 이전에 추가했던 원소를 다시 원래대로 돌려 놓는다.