回溯
1 #include <stdio.h>
2 #include <string.h>
3
4 #define N 100
5 #define L 100000
6
7 int n, tmp, used[ N ], tot, ans[ L ];
8
9 void init() {
10 memset( used, 0, sizeof(used) );
11 tot = 0;
12 tmp = 0;
13 }
14
15 void dfs( int i ) {
16 int j;
17 if ( i > n ) {
18 if ( tot < L ) {
19 ans[ tot ] = tmp;
20 }
21 ++tot;
22 return;
23 }
24 tmp *= 10;
25 for ( j = 1; j <= n; ++j ) {
26 if ( (used[j]==0) && (j!=i) ) {
27 tmp += j;
28 used[ j ] = 1;
29
30 dfs( i+1 );
31
32 used[ j ] = 0;
33 tmp -= j;
34 }
35 }
36 tmp /= 10;
37 }
38
39 void fini() {
40 if ( n < 8 ) {
41 int i;
42 for ( i = 0; i < tot; ++i ) {
43 printf( "%d\n", ans[ i ] );
44 }
45 }
46 else {
47 printf( "%d\n", tot );
48 }
49 }
50
51 int main() {
52 int td;
53 scanf( "%d", &td );
54 while ( td-- > 0 ) {
55 scanf( "%d", &n );
56 init();
57 if ( n > 0 ) {
58 dfs( 1 );
59 }
60 fini();
61 }
62 return 0;
63 }
64