zoukankan      html  css  js  c++  java
  • 全排列

    全排列问题可以用递归解决。假设我们要对1,2,3,4四个数进行全排列,分四种情况:

    (a) 以 1 开头,求 2,3,4 全排列
    (b) 以 2 开头,求 1,3,4 全排列
    (c) 以 3 开头,求 1,2,4 全排列
    (d) 以 4 开头,求 1,2,3 全排列

    而对于 3 个数的全排列也可以按照这种思路递归下去

    代码如下

    def f(array):
        if len(array)==1:
            return array
        ans = []
        num = len(array)
        for i in range(num):
            sub = array[:i]+array[i+1:]
            for j in f(sub):
                if type(j)==type(1):
                    ans.append([array[i],j])
                else:
                    ans.append([array[i]]+j)
        return ans
    
    array=[1,2,3,4]
    for i in f(array):
        print(i)
    

    运行代码

    [1, 2, 3, 4]
    [1, 2, 4, 3]
    [1, 3, 2, 4]
    [1, 3, 4, 2]
    [1, 4, 2, 3]
    [1, 4, 3, 2]
    [2, 1, 3, 4]
    [2, 1, 4, 3]
    [2, 3, 1, 4]
    [2, 3, 4, 1]
    [2, 4, 1, 3]
    [2, 4, 3, 1]
    [3, 1, 2, 4]
    [3, 1, 4, 2]
    [3, 2, 1, 4]
    [3, 2, 4, 1]
    [3, 4, 1, 2]
    [3, 4, 2, 1]
    [4, 1, 2, 3]
    [4, 1, 3, 2]
    [4, 2, 1, 3]
    [4, 2, 3, 1]
    [4, 3, 1, 2]
    [4, 3, 2, 1]
    
  • 相关阅读:
    BZOJ3573: [Hnoi2014]米特运输
    BZOJ3531: [Sdoi2014]旅行
    BZOJ3505: [Cqoi2014]数三角形
    BZOJ3309: DZY Loves Math
    BZOJ3260: 跳
    BZOJ3252: 攻略
    BZOJ3226: [Sdoi2008]校门外的区间
    BZOJ3155: Preprefix sum
    BZOJ2843: 极地旅行社
    BZOJ2671: Calc
  • 原文地址:https://www.cnblogs.com/bill-h/p/14312867.html
Copyright © 2011-2022 走看看