题目描述
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入输出格式
输入格式:
n(1≤n≤9)
输出格式:
由1~n组成的所有不重复的数字序列,每行一个序列。每个数字保留5个常宽。
输入输出样例
输入样例#1:
3
输出样例#1:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
1 #include<bits/stdc++.h>
2 using namespace std;
3 int n;
4 int ans[15];//保存当前的方案
5 int use[15];//表示每个数是否被用过
6 void dfs(int x){//X表示当前搜索到那个数
7 if(x>n){//如果N位都搜索完了,就输出方案并返回
8 for(int i=1;i<=n;i++)
9 printf("% 5d",ans[i]);//输出方案
10 puts("");
11 return;
12 }
13 for(int i=1;i<=n;i++)//从小到大枚举
14 if(!use[i]){//判断这个数是否用过
15 ans[x]=i;//保存到方案中
16 use[i]=1;//标记这个数被使用了
17 dfs(x+1);//进行下一步搜索
18 use[i]=0;//撤销标记
19 }
20 }
21 int main()
22 {
23
24 scanf("%d",&n);//输入
25 dfs(1);//从第一个数开始搜索;
26 }