coreBugZJ

此 blog 已弃。

放书——算法作业 5.3,EOJ 2912


回溯

 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, 0sizeof(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 

posted on 2011-05-30 15:51 coreBugZJ 阅读(273) 评论(0)  编辑 收藏 引用 所属分类: 课内作业


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理