본문 바로가기

알고리즘

DFS 순열, 조합

728x90

DFS 순열, 조합

 

python 내장함수를 사용하지 않고 dfs로 순열 조합을 풀 수 있다.

backtracking 개념과 stack 자료구조가 선행되어야 코드를 이해할 수 있다.

이 개념은 N-queen문제를 정리할때 자세히 포스팅 하도록 하겠다.

 


 

📄 순열.py

import sys
input = sys.stdin.readline

N, M = map(int, input().rstrip().split())

visited = [False]*N
perm = []

def dfs(m):
    if m == 0:
        print(*perm)
        return
    else:
        for i in range(N):
            if visited[i] == False:
                visited[i] = True
                perm.append(i+1)
                dfs(m-1)
                visited[i] = False
                perm.pop()

dfs(M)

📄 조합.py

import sys
input = sys.stdin.readline

N, M = map(int, input().rstrip().split())

visited = [False]*N
perm = []

# 중복 반문을 피하기 위해 start 파라미터 이용
# start 파라미터는 현재 노드 이후의 노드 중에서
# 탐색할 첫번째 노드의 인덱스 값!!!
# 이미 방문한 노드들을 모두 방문한 후에 
# 현재 노드에서 이후 노드들을 탐색하게 되어 중복 방문을 피할 수 있음

def dfs(m, start):
    if m == 0:
        print(*perm)
        return
    else:
        for i in range(start, N):
            if visited[i] == False:
                visited[i] = True
                perm.append(i+1)
                dfs(m-1, i+1)
                visited[i] = False
                perm.pop()

dfs(M, 0)

'알고리즘' 카테고리의 다른 글

데일리 알고리즘 230525  (0) 2023.05.25
백준 10971, 외판원 순회 2  (0) 2023.05.21
자료구조, RBtree 구현  (0) 2023.04.06
자료구조, rbtree delete  (0) 2023.04.06
자료구조, rbtree insert  (0) 2023.04.06