Data Structures & Algorithms

[Algorithms] 완전탐색(백트랙킹, 상태트리와 CUT EDGE)/깊이우선탐색(DFS) Basic-순열 구하기(DFS)

숄구-ml 2022. 5. 25. 14:36

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import sys
# sys.stdin=open("input", "r")
input=sys.stdin.readline    # 입력양이 많을 때 이 라인을 쓰면 입력 속도가 빨라진다
# s=input().rstrip()        # 위의 라인을 사용하게 되면 문자열을 읽을 때 줄바꿈 기호가 들어오므로 이를 날려야한다
 
def DFS(level):
    global cnt
 
    if level == m:
        for i in range(m):
            print(res[i], end=" ")
        print()
        cnt+=1
    else:
        for i in range(1, n+1):
            if check_ls[i]==1:
                continue
            res[level]=i
            check_ls[i]=1       # 쓰인 숫자는 1 체크
            DFS(level+1)
            check_ls[i]=0       # 출력이 끝나면 숫자는 다시 쓰이지 않은 상태로 돌려놓는다
 
if __name__=='__main__':
 
    n, m = map(int, input().split())
    cnt=0
    res=[0]*m
    check_ls=[0]*(n+1)      # 숫자가 중복되지 않기 위해 체크리스트 배열을 하나 만들었다
    DFS(0)
    print(cnt)
cs
728x90