递归-排列问题
问题描述:
- 设R={r1,r2,…,rn}是要进行排列的n个元素,Ri=R-{ri}。集合x中元素的全排列记为Perm(X)。
(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列。
R的全排列可归纳如下:
当n=1时,Perm®=®,其中r是集合中唯一的元素;
当n>1时,Perm®由(r1)Perm(R1),(r2)Perm(R2),(r3)Perm(R3)…(rn)Perm(Rn)构成*。
void perm(int list[],int start,int end1)
{
int i;
if(start == end1)
{
for(i = 0;i <= end1;i++)
cout << list[i];
cout<<endl;
}
else
{
for(i = start; i <= end1; i++){
swap(list[start], list[i]); //交换k, i 位置
perm(list, start + 1, end1);
swap(list[start], list[i]); //还原
}
}
}