考えたことのメモ

自己流で書いた,あまり良くないコードの置き場所です.
残しておいて,だんだん改善できればと思っています.

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))))