我很难弄清楚如何通过在 python 上回溯来生成安排,这是他们在大学问我们的问题
一组从 1 到 n 编号的 n (n<=10) 人被放在一排椅子上,但每两个相邻的人之间出现了一些利益冲突。显示替换人员的所有可能方式,以便在冲突中的任何两个人之间保持一个或最多两个其他人。
我设法修改了排列和皇后的代码,但我真的不知道在哪里放置条件,例如 k 是数字,k 必须与字符串 +1 中的前一个数字不同,并且必须不同于下一个数字+1
坐在椅子上的人的名单是 1 2 3 4(少于 3 人是不可能的)一个正确的解决方案是 1 3 4 2 和 3 1 4 2
这是代码:
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)