Part5.8フルナビゲーションサブセット(DFS)ソート


シーケンスを求める


私が思うコード

import sys
sys.stdin = open("input.txt", "rt")


def DFS(L):
    global cnt

    if L == m:
        for j in range(m):
            print(a[j], end=" ")
        cnt+=1
        print()
    
                   
    else:
        for i in range(1,n+1):
            if L>0 and a[L-1] == i:
                continue
            else:
                a[L] = i

            DFS(L+1)


if __name__ == "__main__":
    n, m = map(int,input().split()) # 3 2
    a =[0]*m
    cnt = 0
    DFS(0)
    print(cnt)

?? どうしてですか.
ヒントが見えました!!

重複を作成しない


チェックリストを作成して確認します...
import sys
sys.stdin = open("input.txt", "rt")


def DFS(L):
    global cnt

    if L == m:
        for j in range(m):
            print(a[j], end=" ")
        cnt+=1
        print()                
    else:

        for i in range(1,n+1):
            if ch[i]==0:
                ch[i]=1
                a[L] = i
                DFS(L+1)
                ch[i] = 0 # 여기서 되돌려줘야 하는 논리를 알아야 한다!!!!!! 진행상태 중, 이 줄은 back 해서 돌아온 부분이잖아 !!!!
                # ↑↑↑↑여기는 함수가 종료되고 한단계 전으로 돌아온 부분이기 때문에 0으로 초기화해줘도 되는거지 !! 다음 for문을 위해서..
            else:
                continue

if __name__ == "__main__":
    n, m = map(int,input().split()) # 3 2
    a =[0]*m
    ch = [0]*(n+1)
    cnt = 0

    DFS(0)
    print(cnt)
0に初期化された部分を理解!思考力を養う.