题目链接:http://codeup.cn/problem.php?cid=100000608&pid=0
题目描述
排列与组合是常用的数学方法。
先给一个正整数 ( 1 < = n < = 10 )
例如n=3,所有组合,并且按字典序输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
输入
输入一个整数n( 1<=n<=10)
输出
输出所有全排列
每个全排列一行,相邻两个数用空格隔开(最后一个数后面没有空格)
样例输入
3
样例输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
代码
#include <cstdio>
int n;
bool flag[20]={false};
int ans[20];
void combine(int count) {
if(count == n +1) { //递归出口
for(int i = 1;i <= n; i++) {
printf("%d ", ans[i]);
}
printf("\n");
return ;
}
for(int i = 1;i <= n; i++) { //依次枚举
if(flag[i] == false) {
ans[count] = i;
flag[i] = true;
combine(count+1);
flag[i] = false;
}
}
}
int main() {
while(scanf("%d",&n) != EOF) {
int count = 1;
combine(count);
}
return 0;
}