深度优先搜索实现全排列

深度优先搜索实现全排列

"""
利用深度优先算法实现全排列

深度优先的关键在于每一步有哪些可能,满足
一种可能后就往下继续到最后一步完成则往前
回溯其它可能。

dfs(step):
    判断边界:执行相关操作,返回
    尝试每一种可能 for( i = 1; i <=n; i++):
        继续下一步 dfs(step+1)
    回溯
"""


import copy


d = {}
result = []


def permutation(li, n):
    if 'temp' not in d:
        d['temp'] = [''] * len(li)
    if 'book' not in d:
        d['book'] = [0] * len(li)
    book = d['book']
    temp = d['temp']
    if n == len(li):
        result.append(copy.deepcopy(temp))
        print(temp)
        return
    for i in range(len(li)):
        if book[i] == 0:
            temp[n] = li[i]
            book[i] = 1
            permutation(li, n + 1)
            book[i] = 0


if __name__ == '__main__':
    permutation([1, 2, 3], 0)
    print(result)

posted @ 2019-04-24 11:08  村口王铁匠  阅读(345)  评论(0)    收藏  举报