728x90
중복(허용) 순열 :
def dfs(L) :
if L == m :
for i in range(m) :
print(mp[i],end = "")
print()
else :
for i in range(1,n+1) :
mp[L] = i
dfs(L+1)
if __name__=="__main__" :
n,m = map(int,input().split())
check = [0]*(n+1)
mp = [0]*m
dfs(0)
3 2을 입력할 시
이렇게 출력된다.
중복을 허용하여 1~3까지의 수 중 2자리수가 나오는 것이다.
순열 :
def dfs(L) :
if L == m :
for i in range(m) :
print(mp[i],end = "")
print()
else :
for i in range(1,n+1) :
if check[i] == 0 :
check[i] = 1
mp[L] = i
dfs(L+1)
check[i] = 0
if __name__=="__main__" :
n,m = map(int,input().split())
check = [0]*(n+1)
mp = [0]*m
dfs(0)
3 2를 입력할 시 밑 사진처럼 출력된다.
check배열을 이용해 이미 mp에 있는 값은 출력하지 않도록 만들었기 때문이다.
반응형
'알고리즘 > 알고리즘 개념' 카테고리의 다른 글
비트마스크? 그게 뭔데 (0) | 2022.08.11 |
---|---|
[python]이차원 배열을 뒤집는 방법_zip(*list) (0) | 2022.08.03 |
[python 구현]DFS에서 꼭 필요한 개념 - 조합 (combination) (0) | 2022.07.11 |
백트래킹과 DFS가 무슨 관계인가요? (0) | 2022.07.01 |
힙(heap)_어떻게 쓰지? python에서는 (0) | 2022.06.10 |