Python:回溯排列问题

2024-04-29 19:45:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,在一个竞技场里有m只狮子和n只老虎,我需要找到所有可能的解决方案,以便以这样的方式将它们消灭,没有两只老虎被一只接一只地消灭。我需要用回溯法。我的想法是对狮子和老虎的初始列表生成所有可能的排列,并且只保留有效的。这是我的代码,但问题是我没有找到从解决方案中删除重复项的方法。。有人知道怎么解决这个问题吗?提前谢谢!你知道吗

def toString(List):
    return ' '.join(List)

def is_solution(listOfTL):
    for i in range (0, len(listOfTL)-1):
         if listOfTL[i] == "T" and (listOfTL[i] == listOfTL[i+1]) :
             return -1
    return 0

def permute(a, l, r):
     if  is_solution((a)) == 0 and l == r:
         print (toString(a))
     else:
         for i in range(l,r+1):
             a[l], a[i] = a[i], a[l]
             permute(a, l+1, r)
             a[l], a[i] = a[i], a[l] 

def main():
     n = int(input ("Number of tigers: "))
     m = int(input ("Number of lions: "))
     listOfValues = []
     for i in range (0, n) :
         listOfValues.append('T')
     for i in range (n+1, m+n+1):
         listOfValues.append('L')
     print(permute(listOfValues, 0, len(listOfValues)-1))

Tags: inforlenreturnisdefrange解决方案