自己流で書いた,あまり良くないコードの置き場所です.
残しておいて,だんだん改善できればと思っています.
DFS
N!通りの並び順を書き出す
1, 2, 3の全ての並び順(3!=6通り)を出力する.(考えたきっかけ:C - Count Order, AtCoder - 全探索に慣れよう!!! (2021.4) - 競プロはじめました)
def dfs(l_0, l_now, depth): global ans if depth == N: ans.append(l_now) else: for j in range(N): if l_0[j] not in set(l_now): dfs(l_0, l_now + [l_0[j]], depth+1) N = 3 l_0 = [i for i in range(1,N+1)] ans = [] dfs(l_0, [], 0) print(ans)
【メモ】
- 再帰関数中で変数を書き換えないこと(例えば,dfsを呼び出す前にリスト変数を定義するとバグる).その後呼び出される変数も全て書き変わってしまうため.
- returnすると終了してしまうので,global ansに入力している.
ライブラリを使えば,同じことが以下でできるようです.
import itertools N = 3 print(list(itertools.permutations(range(1, N+1))))