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 }

posted on 2013-02-10 19:52  yelcoved  阅读(226)  评论(0)    收藏  举报