私は一意のパーマネントを見つける問題でバックトラッキングを使用しようとしています。この例では、この1つは、私はまだ結果で重複しなければならないのはなぜバックトラックを使用した一意の順列
A = [2, 2, 1, 1]
f(A, 0, len(A))
[2, 2, 1, 1]
[2, 1, 2, 1]
[2, 1, 1, 2]
[2, 2, 1, 1] #unwanted duplicate!
[1, 2, 2, 1]
[1, 2, 1, 2]
[1, 1, 2, 2]
[1, 2, 2, 1]
[1, 2, 1, 2]
[2, 2, 1, 1]
[2, 1, 2, 1]
[2, 1, 1, 2]
[2, 2, 1, 1]
動作しない
A = [2, 3, 2]
f(A, 0, len(A))
[2, 3, 2]
[2, 2, 3]
[3, 2, 2]
を作品
def f(A, start, end):
if start == end - 1:
print(A)
else:
for idx in range(start, end):
if idx != start and A[idx] == A[start]:
continue
A[idx], A[start] = A[start], A[idx]
f(A, start + 1, end)
:私はこれを書かれていますか?
をさて、あなたは、F' 'では、' A = [2,2,1,1] '持っています([2,1,2,1]、1、len(A) ')も呼び出すことができ、どちらの場合も' [2,2,1,1] 'を出力することができます(最初は置換なし、要素間の置換インデックス1と2の) – Nuageux