题目描述
把 1~n 这 n(n<10) 个整数排成一行后随机打乱顺序,输出所有可能的次序。
输入
一个整数n。
输出
按照从小到大的顺序输出所有方案,每行1个。 首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。
样例输入
3
样例输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
#include <iostream> #include <string> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <vector> #include <queue> #include <map> #define range(i,a,b) for(int i=a;i<=b;++i) #define LL long long #define rerange(i,a,b) for(int i=a;i>=b;--i) #define fill(arr,tmp) memset(arr,tmp,sizeof(arr)) using namespace std; int num[20],n; void init(){ fill(num,0); cin>>n; } void solve(int n,int ans){ if(ans==n)range(i,0,n-1)cout<<num[i]<<(i==n-1?' ':' '); else range(i,1,n){ bool flag=true; range(j,0,ans-1)if(num[j]==i)flag=false; if(flag){ num[ans]=i; solve(n,ans+1); } } } int main() { init(); solve(n,0); return 0; }