/**排列问题
* 设计一个递归算法生成10个元素{1,2,…,10}的全排列*/
#include <iostream>
using namespace std;
#define len 10
inline void swap(int &a,int &b){
int t=a;
a=b;
b=t;
}
//a[begin,end]进行全排列
void perm(int a[],int begin,int end){
if(begin==end){
for(int i=0;i<=end;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}else{
//将a[begin,end]每一个元素与a[begin]交换
//然后递归求a[begin+1,end]的全排列,作为a[0,begin]的后缀
for(int i=begin;i<=end;i++){
swap(a[begin],a[i]);
perm(a,begin+1,end);
swap(a[begin],a[i]);//恢复
}
}
}
int main(){
int a[len];
for(int i=0;i<len;i++)
a[i]=i+1;
perm(a,0,len-1);
return 0;
}
002-4算法笔记【递归】-习题2-4-全排列
于 2022-04-24 09:21:34 首次发布