回溯法求解全排列问题

回溯法求解全排列问题

对于数组{1,2,3}进行全排列

问题的解空间树如图所示:

对于n个元素的全排列,是一个n层的解空间树

我们要做的任务就是确定每一层取哪个值

 

第一层中我们有三个取值

第二层中每个分支有两种取值

最后一层中每个分支只有一个取值

第一层中,我们的第一个位置是排好的,我们要做的是排之后的元素

第二层中,我们要做的仅仅是排第三个位置的元素

由此得出结论,对于已经排好的部分,我们就不用去管了,只要去排后面的就好了

对于每一个元素我们使用for()依次选取每个没有排序的元素

对于数组a={1,2,3}

我们第一层可以选三个元素,分别为a[0],a[1],a[2],第二层中,我们可以选择元素为a[1],a[2].推广一下对于含有N个元素的数组A,第i层可以选择进行排序的元素为A[i-1],...A[N-1].

其中对于每一层的元素选择,我们可以看做是未排序数组部分a[i],,,a[n-1]第一个元素的确定,我们可以理解为第一个元素和哪个元素交换,若是选择第j个元素作为未排序的第一个,那么只需要将a[i],和a[j]交换即可,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值