中心思想:
递归求子数组的全排列。
具体操作:
- 将每个元素都与子数组的第一个元素交换,
- 再求剩余部分的全排列,
- 求完后再交换会来,复原原数组。
中止条件:low==high时,输出一种排列情况。
#include <iostream>
using namespace std;
void swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
void perm(int list[],int low,int high){
if(low==high){ //当low==high时,此时list就是其中一个排列,输出list
for(int i=0;i<=low;i++)
cout<<list[i];
cout<<endl;
}else{
for(int i=low;i<=high;i++){//每个元素与第一个元素交换
swap(list[i],list[low]);
perm(list,low+1,high); //交换后,得到子序列,用函数perm得到子序列的全排列
swap(list[i],list[low]);//最后,将元素交换回来,复原,然后交换另一个元素
}
}
}
int main()
{
int list[]={1,2,3};
perm(list,0,2);
return 0;
}