把 1~n这n个整数排成一行后随机打乱顺序,输出全部可能的次序。spa
一个整数n。code
按照从小到大的顺序输出全部方案,每行1个。blog
首先,同一行相邻两个数用一个空格隔开。递归
其次,对于两个不一样的行,对应下标的数一一比较,字典序较小的排在前面。it
1≤n≤9io
3
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
#include <cstdio> const int N = 10; int state[N]; // 0:表示没放数,1~n:表示放了哪一个数 bool used[N]; //true:表示用过,flase:表示未使用 int n; void dfs(int u) { if (u == n + 1) { for (int i = 1; i <= n; i ++) printf("%d ", state[i]); printf("\n"); return; } for (int i = 1; i <= n; i ++) { if (!used[i]) { state[u] = i; used[i] = true; dfs( u + 1); //恢复现场 state[u] = 0; //能够去掉 used[i] = false; } } } int main() { scanf("%d", &n); dfs(1); return 0; }