思路:
dfs搜索即可,如果填满了就输出,没填满的话判断这个数在这一次排列中有没有使用过,没有使用过就把它填在下一个位置上,然后搜索下一次排列
int n;
int a[10],vis[10];
void print()
{
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
printf("\n");
}
void dfs(int k)//当前是第几个数
{
if(k == n)//已经填满
{
print();
return ;
}
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
a[k+1] = i;
vis[i] = 1;
dfs(k+1);
vis[i] = 0;
}
}
}
int main()
{
cin >> n;
dfs(0);
return 0;
}