n的全排列
#include<stdio.h>
void print_permutation(int n,int *A,int cur)
{
if(cur==n)
{
for(int j=0;j<n;j++)
printf("%d ",A[j]);
printf("\n");
}
else
{
for(int i=1;i<=n;i++)
{
int flag=1;
for(int j=0;j<cur;j++)
{
if(A[j]==i)
flag=0;
}
if(flag)
{
A[cur]=i;
print_permutation(n,A,cur+1);
}
}
}
}
int main()
{
int A[20];
int n;
while(~scanf("%d",&n))
{
print_permutation(n,A,0);
}
return 0;
}
给定数组的全排列
#include<stdio.h>
int print_permutation(int n,int cur,int *p,int *A)
{
if(cur==n)
{
for(int i=0;i<n;i++)
printf("%d ",A[i]);
printf("\n");
}
else
{
for(int i=0;i<n;i++)
{
int c1=0,c2=0;
if(i==0||p[i-1]!=p[i])
{
for(int j=0;j<cur;j++)
{
if(A[j]==p[i])
c1++;
}
for(int j=0;j<n;j++)
{
if(p[j]==p[i])
c2++;
}
if(c1<c2)
{
A[cur]=p[i];
print_permutation(n,cur+1,p,A);
}
}
}
}
}
int main()
{
int p[4]={1,1,3,4};
int A[4];
print_permutation(4,0,p,A);
return 0;
}