递归。。。
#include <cstdio>
#include <cstring>
using namespace std;
int n;
int a[100],b[100],vis[100];
void whole(int k) //循环到第k位
{
int i;
if (b[n]!=0)
{
for (i=1;i<=n;i++)
printf("%d ",b[i]);
printf("\n");
return ;
}
for (i=1;i<=n;i++)
{
if (vis[i]==0)
{
vis[i]=1;
b[k]=a[i];
k++;
whole(k);
k--; vis[i]=0; b[k]=0;
}
}
}
int main()
{
int i;
freopen("a.txt","r",stdin);
scanf("%d",&n);
memset(b,0,sizeof(b));
memset(vis,0,sizeof(vis));
for (i=1;i<=n;i++)
a[i]=i;
whole(1);
return 0;
}