一种生成排列的简单想法

        对于生成n个数的排列,我们大家肯定都知道一种回朔的解法,这种解法就是根据8皇后得来的,当然,需要把冲突条件改一下就行.然而,我们现在要提的是另外一种方法,就是通过定义去写的一种算法.

        显然,1的排列就是1;1,2的排列有1,2和2,1两个;现在我们考虑1,2,3这三个数的排列,显然,1,2,3这三个数的排列其实就是分以下三种情况:

      1)把1放在第1位,剩下的就是2,3的两个数排列

      2)把2放在第1位,剩下的就是1,3两个数排列

      3)把3放在第1位,剩下的就是1,2两个数的排列

        这种思想其实就是我们通常写出n个数的排列的一种思考过程,当然,对于n个数我们也可以考虑分成n种情况,与上面的类似而已.

这种算法实现起来非常简单,代码如下:

#include <iostream>
using namespace std;

void permutation(int* array, int iLength, int iCurStep);


int main(){
    int array[] = {1,2,3,4};
    permutation(array, 4, 0);
}

void permutation(int* array, int iLength, int iCurStep){
    if(iLength == iCurStep){
        for(int i = 0; i< iLength; ++i){
            cout<<array[i]<<' ';
        }
        cout<<endl;
        return;
    }
    for(int i= iCurStep; i< iLength; ++i){
        swap(array[i], *array);
        permutation(array, iLength, iCurStep+1);
        swap(array[i], *array);
    }
}
版本所有,如果需要转载,请标明出处,谢谢.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值