poj2245
这个一看就是dfs,必须的,今天也要把dfs在总结一下,因为已经有3个月没看了,都忘了,之前写了个迷宫,现在可好,竟然给忘了,哎,没办法,然后今天再去看完全不懂了,然后逼我今天再做一下总结,没办法,dfs最重要的是递归,怎么递归,就是递归吗,从头开始第一项,等,然后递归时,不断加1,就行了,而输出的部分呢,也是,把每一项都给输出,还有关于每次都要递归,不是从头开始,而是一个一个递归,还有一个最重要的是,全局变量,和局部变量,今天就是这个i值,就是这次给的是全局变量,发现怎么都不是递归,一开始没找到原因,后来才发现,才知道,每次,如果是全局变量,那么每次都不能产生一个新i值仅仅只有一个i,从而不能产生递归,而重新用方法,可以产生新i每次都可以产生新的i值,因此达到递归的效果,附上代码 1 #include <stdio.h>
2 #include <stdlib.h>
3 int a[15];
4 int n;
5 int vis[15];
6 void dfs(int now, int p)
7 {
8 int i;
9 if(now == 6)
10 {
11 for(i = 0;i < 6; i++)
12 {
13 printf("%d",vis[i]);
14 if(i < 5)
15 printf(" ");
16 }
17 printf("\n");
18 return ;
19 }
20
21 for(i = p; i < n; i++)
22 {
23 vis[now] = a[i];
24 dfs(now+1,i+1);
25 }
26
27
28 }
29 int main()
30 {
31 int i;
32 while(scanf("%d", &n)!=EOF&&n!=0)
33 {
34 for(i = 0;i < n ; i++)
35 scanf("%d",&a[i]);
36 //for(i = 0; i < n ; i++)
37 // printf("%d",a[i]);
38
39
40 dfs(0,0);//output, input
41 printf("\n");
42
43 }
44 return 0;
45 }
3 int a[15];
4 int n;
5 int vis[15];
6 void dfs(int now, int p)
7 {
8 int i;
9 if(now == 6)
10 {
11 for(i = 0;i < 6; i++)
12 {
13 printf("%d",vis[i]);
14 if(i < 5)
15 printf(" ");
16 }
17 printf("\n");
18 return ;
19 }
20
21 for(i = p; i < n; i++)
22 {
23 vis[now] = a[i];
24 dfs(now+1,i+1);
25 }
26
27
28 }
29 int main()
30 {
31 int i;
32 while(scanf("%d", &n)!=EOF&&n!=0)
33 {
34 for(i = 0;i < n ; i++)
35 scanf("%d",&a[i]);
36 //for(i = 0; i < n ; i++)
37 // printf("%d",a[i]);
38
39
40 dfs(0,0);//output, input
41 printf("\n");
42
43 }
44 return 0;
45 }
浙公网安备 33010602011771号