如题,思路:
例如n==3, a[n]= {1,2,3}
1,2,3可以打头,
1打头时,2,3可以打头(1不被考虑),
在1打头时,2打头(第二个数),只剩下3即1,2,3
在1打头时3打头(第二个数),只剩下2即1,3,2
以此类推
#include<stdio.h>
#define n 3
int a[n];
void dfs(int t)
{
int i,temp;
if(t==n-1)
{
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}else
{
for(i=t;i<n;i++)
{
temp=a[i],a[i]=a[t],a[t]=temp;
dfs(t+1);
temp=a[i],a[i]=a[t],a[t]=temp;//恢复原状
}
}
}
int main()
{
for(int i=0;i<n;i++)
a[i]=i+1;
dfs(0);
return 0;
}