排列树

还是拿背包问题来分析吧,假设有N个背包,现在我们要对这个N个背包排列。。输出所有情况

那么有:

         背包                  1                  2                  3                  ...                  n         
              (n个背包选一个!)     (n-1个背包选一个!)     (n-2个背包选一个!)      ...    (只剩下一个背包啦!凑合用着吧!)

 

生动点形容整个场景,存在N个人
  第一步,在这N个人中找一个人轮流坐在第一个位置上
  第二步,在这N-1个人中找一个人轮流坐在第一个位置上 第一个位置已经固定人了
  第三步,在这N-2个人中找一个人轮流坐在第一个位置上 第一/二个位置已经固定人了
  第四步,在这N-3个人中找一个人轮流坐在第一个位置上 第一/二/三个位置已经固定人了

      。。。。

 

#!/usr/bin/env python
# coding=utf-8

# 排列树
def perm(arr, k):
    arrLen = len(arr)
    if arrLen  == k:
        print arr
        return

    # [0, k) 区间都是确定好的元素,不能再搞他们的位置了。。。。
    for index in range(k, arrLen):

        # 第k层考虑下用arr数组的index 号元素?
        temp = arr[index]
        arr[index] = arr[k]
        arr[k] = temp

        perm(arr, k + 1)

        # 第k层考虑下不再用arr数组的index 号元素了
        temp = arr[index]
        arr[index] = arr[k]
        arr[k] = temp

arr = [1, 2, 3]
num = 0
perm(arr, num)

 

转载于:https://www.cnblogs.com/ccXgc/p/8992228.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值