#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define N 3
void swap(int arr[],int p,int q)
{
int tmp=arr[p];
arr[p]=arr[q];
arr[q]=tmp;
}
void perm(int arr[],int p,int q){
if(q==p) { //递归截止条件,输出
for(int i=0;i<N;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
} else
{
for(int i=p;i<=q;i++) //每次循环的意思是依次将遍历的每个元素排在数组的第一个
{
swap(arr,i,p); //交换arr[i]和arr[p]的值
sort(arr+p+1,arr+N); //对arr[p+1]到arr[q]递增排序
perm(arr,p+1,q);
sort(arr+p,arr+N); //对arr[p]到arr[q]递增排序
}
}
}
int main(void)
{
int arr[3]={1,2,3};
sort(arr,arr+N); //初始递增排序
perm(arr,0,N-1);
return 0;
}
算法笔记上的:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
#define maxn 11
int P[maxn];
bool hashTable[maxn]={false};
void generateP(int index)
{
if(index==n+1)
{
for(int i=1;i<=n;i++)
{
printf("%d ",P[i]);
}
printf("\n");
}
else
{
for(int x=1;x<=n;x++)
{
if(hashTable[x]==false)
{
P[index]=x;
hashTable[x]=true;
generateP(index+1);
hashTable[x]=false;
}
}
}
}
int main(void)
{
n=4;
generateP(1);
return 0;
}