D的小L
时间限制:
4000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡出了个题目想难倒匡匡(小L很D吧
),有一个数n(0<n<10),写出1到n的全排列,这时匡匡有点囧了
,,,聪明的你能帮匡匡解围吗?
-
输入
- 第一行输入一个数N(0<N<10),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个整数x(0<x<10) 输出
-
按特定顺序输出所有组合。
特定顺序:每一个组合中的值从小到大排列,组合之间按字典序排列。
样例输入
-
2 2 3
样例输出
-
12 21 123 132 213 231 312 321
简单深搜;
代码:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
const int M = 20;
using namespace std;
int n;
char ss[M];
bool vis[M];
const string s = "123456789";
void dfs(int step){
if(step == n){
ss[n] = '\0';
cout << ss <<endl; return ;
}
for(int i = 0; i < n; ++ i){
if(!vis[i]){
vis[i] = 1;
ss[step] = s[i];
dfs(step+1);
vis[i] = 0;
}
}
}
int main(){
int t;
cin >> t;
while(t --){
memset(vis, 0, sizeof(vis));
cin >> n;
int i;
for(i = 0; i < n; ++ i){
ss[0] = s[i];
vis[i] = 1;
dfs(1);
vis[i] = 0;
}
}
return 0;
}