生成一个排列的新想法

对于生成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种情况,与上面的类似而已.

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

 

  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. void permutation(int* array, int iLength, int iCurStep);  
  5.   
  6.   
  7. int main(){  
  8.     int array[] = {1,2,3,4};  
  9.     permutation(array, 4, 0);  
  10. }  
  11.   
  12. void permutation(int* array, int iLength, int iCurStep){  
  13.     if(iLength == iCurStep){  
  14.         for(int i = 0; i< iLength; ++i){  
  15.             cout<<array[i]<<' ';  
  16.         }  
  17.         cout<<endl;  
  18.         return;  
  19.     }  
  20.     for(int i= iCurStep; i< iLength; ++i){  
  21.         swap(array[i], *array);  
  22.         permutation(array, iLength, iCurStep+1);  
  23.         swap(array[i], *array);  
  24.     }  
  25. }  

版本所有,如果需要转载,请标明出处,谢谢.

posted @ 2013-05-21 06:35  夜月神  阅读(797)  评论(2编辑  收藏  举报