第一种方法:递归
待求数组排列中不能有重复元素
void perm(int a[],int cnt){
if(cnt==n+1){
cout<<.....;
return ;
}
else{
依次考虑a数组中的每个元素v
perm(在s中添加v构成新数列);//s为储存数组
}
#include<bits/stdc++.h>
using namespace std;
bool x[12];//记录此数是否已经选入xx数组中
int xx[13];
int n;
int s[13]; //需要进行全排列的数组
void p_search(int a)
{
if(a==n+1)
{
for(int i=1;i<=n;++i)
{
printf("%5d",xx[i]);
}
printf("\n");
return;
}
for(int i=1;i<=n;++i)
{
if(!x[s[i]])
{
xx[a]=s[i];
x[s[i]]=true;
p_search(a+1);// p_search(++a);是错的,因为不仅改变了参数值,还改变了本次递归中a值
x[s[i]]=false;//回溯阶段要清除标记
}
}
}
int main()
{
cin>>n;