본문 바로가기

알고리즘 문제풀이

백준 15650. N과 M (2) Python 백트래킹 실버3

리스트 path에 저장시키면서, 일정 깊이에 도달했을 때, path를 출력하는 순열 코드에서

얕은 복사를 이용해 path를 paths로 복사한 후,

paths를 정렬 후 리스트path_wrap와 비교해서 존재하지 않는 다면 추가하고,

출력할때 for문을 이용해서 출력하는 방식을 사용했다.

n,m = map(int,input().split())
path = []
path_wrap = []
visited = [False] * (n+1)
def perm(level):
    if level ==m:
        paths = path[:]
        paths.sort()
        if paths not in path_wrap:
            path_wrap.append(paths)
        return
    for i in range(1,n+1):
        if visited[i]: continue
        visited[i] = True
        path.append(i)
        perm(level+1)
        path.pop()
        visited[i] = False

perm(0)
for i in path_wrap:
    print(*i)