4070 全排列

题目来源:
http://bailian.openjudge.cn/practice/4070/
描述
对于数组[1, 2, 3],他们按照从小到大的全排列是
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
现在给你一个正整数n,n小于8,输出数组[1, 2, …,n]的从小到大的全排列。

输入
输入有多行,每行一个整数。当输入0时结束输入。
输出
对于每组输入,输出该组的全排列。每一行是一种可能的排列,共n个整数,每个整数用一个空格隔开,每行末尾没有空格。
样例输入
2
3
0
样例输出
1 2
2 1
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
题意描述:
输入一个正整数n(小于8)
输出1到n的所有全排列方案
解题思路:
意即求n个位置放n个数的所有方案
程序代码:

 1 #include<stdio.h>
 2 int r[10],u[10];
 3 void dfs(int n,int x);
 4 int main()
 5 {
 6     int n,i;
 7     while(scanf("%d",&n),n!=0)
 8     {
 9         dfs(n,1);    
10     }
11     return 0;
12 }
13 void dfs(int n,int x)
14 {
15     int i;
16     if(n+1==x)
17     {
18         for(i=1;i<n;i++)
19             printf("%d ",r[i]);
20         printf("%d
",r[n]);
21         return;
22     }
23     for(i=1;i<=n;i++)
24     {
25         if(!u[i])
26         {
27             r[x]=i;
28             u[i]=1;
29             dfs(n,x+1);
30             
31             u[i]=0;
32         }
33     }
34 }
原文地址:https://www.cnblogs.com/wenzhixin/p/6925302.html