dthy
@dthy (dorrrothy)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

組み合わせのアルゴリズムについて

下記の問題をライブラリ(itertoolsなど)を使用しない解き方を教えていただきたいです。

入力をnとした時に、0,1,2,…,n−1 までの数について、全ての並べ方を1行ごとに出力するプログラム

入力:
3
出力:
0 1 2
0 2 1
1 0 2
1 2 0
2 0 1
2 1 0

ライブラリを使用しないと解けないのでぜひアルゴリズムを教えてほしいです。

0

2Answer

Comments

  1. @dthy

    Questioner

    見落としてました。
    ありがとうございます

細かいチューニング部分はあるけど、
以下で動きました。

def permutations_rec(cands):
    if len(cands) == 1:
        return [cands]
    ret = []
    for cand in cands:
        remain = [c for c in cands if c != cand]
        for perm in permutations_rec(remain):
            ret.append([cand] + perm)
    return ret


def permutations(n):
    return permutations_rec(list(range(n)))


if __name__ == '__main__':
    for perm in permutations(3):
        print(*perm)
0Like

Your answer might help someone💌