所谓全排列,就是打印出序列中所有可能的排列。例如输入序列123,则打印出能排列出来的所有序列123、132、213、231、312和321。
#include<stdio.h>
const int max = 10;
int n, r[max], m[max];
int p(int i);
int main()
{
scanf("%d", &n);
p(1);
return 0;
}
int p(int i)
{
int j, z;
if(i==n+1)//边界
{
for(j = 1;j<=n;j++)//依此输出每一容器的数
{
printf("%d", r[j]);
}
printf("\n");
return 0;
}
for(z = 1;z<=n;z++)
{
if(m[z]==false)//若z还没有进入排列
{
r[i] = z;//将z放入第i容器
m[z] = true;
p(i+1);//进入下一容器
m[z] = false;
}
}
return 0;
}