思想:依次生成以data[0]開頭的所有排列,data[1]開頭的所有排列...
1)全排列
#include "iostream"
#include "iterator"
#include "algorithm"
using namespace std;
int data[5] = {1,2,3,4,5};
void perm(int index[],int n, int k) {
int i;
if (k == n) {
for(int i = 0; i < n; i++)
cout<<data[index[i]]<<" ";
cout<<endl;
return;
}
for (i = k; i < n; i++) {
swap(index[k], index[i]);
perm(index, n, k + 1);
swap(index[k], index[i]);
}
}
int main() {
int index[] = {0,1, 2, 3, 4};
perm(index, 5, 0);
return 0;
}
2)排列,n個元素中抽取m個的排列(不保證輸出的順序)
#include "iostream"
#include "iterator"
#include "algorithm"
using namespace std;
int data[5] = {1,2,3,4,5};
void perm(int index[],int n, int m,int k) {
int i;
if (k == m) {
for(int i = 0; i < m; i++)
cout<<data[index[i]]<<" ";
cout<<endl;
return;
}
for (i = k; i < n; i++) {
swap(index[k], index[i]);
perm(index, n,m, k + 1);
swap(index[k], index[i]);
}
}
int main() {
int index[] = {0,1, 2, 3, 4};
perm(index, 5, 3,0);
return 0;
}