递归
#include<stdio.h>
#include<string.h>
int n;
int a[90000];
void all(int k)
{
int i;
if (k == n)
{
for(i = 1; i < n; i++)
{
printf("%d,",a[i]);
}
printf("%d\n",a[n]);
}
else
{
for (i = k; i <= n; i++) //第i个数分别与它后面的数字交换就能得到新的排列
{
int t = a[i];
a[i] = a[k];
a[k] = t;
all(k + 1);
t = a[i];
a[i] = a[k];
a[k] = t;
}
}
}
int main()
{
int i,m;
scanf("%d",&m);
while(m--)
{
scanf("%d",&n);
for(i = 1; i <= n; i++)
{
scanf("%d",&a[i]);
}
all(1);
}
return 0;
}
用树状图理解