私はPythonでバックトラックを介してアレンジメントを生成する方法を理解しようとするのに苦労しています、それは彼らが大学で私たちに尋ねたものです
1からnまでの番号が付けられたn人(n <= 10)のグループが椅子の列に配置されますが、2人の隣人ごとにいくつかの利害の対立が現れました。対立している2人の間で、1人または多くても2人の他の人がとどまるように、人を置き換えるために可能なすべてのモダリティを表示します。
順列と女王のコードを変更することができましたが、条件をどこに置くかは本当にわかりません。たとえば、kは数字であり、kは文字列+1の前の数字とは異なる必要があり、次の番号+1
椅子に座っている人のリストは123 4です(3人未満では不可能です)1つの正しい解決策は1 342と3142になります
コードは次のとおりです。
class Permutations(Backtracking):
def __init__(self, n):
Backtracking.__init__(self, n)
def _init_value(self, k):
return 0
def _next_value(self, n, k, v):
if v < n:
return v + 1
return None
def _cond(self, k, possible, v):
if v is None:
return False
try:
possible[:k].index(v)
return False
except ValueError:
return True
def _solution(self, n, k, possible):
return k == n-1
def _handle_solution(self, n, k, possible):
print(possible)