[Brute Force]Boj 15650:NおよびM(2)

1414 ワード

[Brute Force]Boj 1560:NとM(2)
Link: https://www.acmicpc.net/problem/15650
質問する
自然数NとMが与えられた場合、以下の条件を満たすすべての長さMの数列を解くプログラムを作成します.
  • 1からNまで、自然水体中でM個の数列
  • を繰り返し選択する.
  • の数列を選択するには、昇順に並べます.
  • 入力
  • の第1行は、自然数NおよびMを与える.(1 ≤ M ≤ N ≤ 8)
  • しゅつりょく
  • 行ごとに問題条件を満たす数列が出力されます.重複する数列は複数回出力できません.各数列はスペースで区切らなければなりません.
  • 数列は、予めインクリメントされた順序で出力されるべきである.
  • I/O例

    Code | Python
    import sys
    si = sys.stdin.readline
    
    N,M = list(map(int,si().split()))
    
    def rec(K,N,M,selected,used):
        if K == M:
            for x in selected:
                print(x,end = " ")
            print()
        else:
            if K == 0: start = 1
            else: start = selected[K-1] + 1
            for cand in range(start,N+1):
                if used[cand] == False:
                    selected[K] = cand
                    used[cand] = True
                    rec(K+1,N,M,selected,used)
                    selected[K] = 0
                    used[cand] = False
    
    selected = [0 for _ in range(M)]
    used = [False for _ in range(N+1)]
    rec(0,N,M,selected,used)
    Code Screenshot & Output