簡體   English   中英

帶條件的Python排列(回溯)

[英]Python permutations with condition (backtracking)

我想使用回溯解決問題。 就像在...中,我得到了一個數字列表,我想使用回溯找到尊重給定條件的所有可能排列。

我有用於生成排列列表的代碼,但它無濟於事,因為我無法在將每個排列添加到列表之前單獨檢查每個排列,因此它不會回溯,只是遞歸的。 我也了解回溯的工作方式:從0到x的排列,但不是列表的排列...

這是我的排列列表生成器

def permutare(self, lista):
        if len(lista) == 1:
            return [lista]
        res = []
        for permutation in self.permutare(lista[1:]):
            for i in range(len(lista)):
                res.append(permutation[:i] + lista[0:1] + permutation[i:])
        return res

有效,但無濟於事。 我嘗試將驗證插入到某處,但無處工作。.我嘗試了所有可以找到的置換算法。 我需要一個回溯

對條件回溯排列有任何想法/算法/偽代碼嗎?

這是一個通過交換列表中的元素來使用回溯的解決方案。

基本思想是:

  • 將每個元素交換到開始位置。
  • 計算索引為[0:start]的其余分區

碼:

def swap(lista, idx1, idx2):
    temp = lista[idx1]
    lista[idx1] = lista[idx2]
    lista[idx2] = temp

def valid():
    return True

def permutare(lista, start):
    if start >= len(lista):
        if valid():
            return [list(lista)]

    output = []
    for idx in xrange(start, len(lista)):
        swap(lista, start, idx)
        output.extend(permutare(lista, start + 1))
        swap(lista, start, idx)  # backtrack
    return output

print len(permutare(['a','b','c'], 0))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM