生成一个排列的新想法
对于生成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);
- }
- }
版本所有,如果需要转载,请标明出处,谢谢.
荣耀的背后刻着一道孤独