Python:回溯排列问题

时间:2016-03-06 16:54:03

标签: python permutation backtracking

我有一个问题,就是在竞技场中有狮子和老虎,我需要找到所有可能的解决方案序列,以便以一种接一个的方式取出两只老虎的方式取出它们。我需要使用回溯方法。我的想法是生成狮子和老虎的初始列表的所有可能的排列,并仅保留有效的列表。这是我的代码,但问题是我没有找到从解决方案中删除重复项的方法..有没有人知道如何解决这个问题?提前谢谢!

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

0 个答案:

没有答案