對於生成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種情況,與上面的類似而已.
這種算法實現起來非常簡單,代碼如下:
[cpp]
#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);
}
}