bon

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  46 Posts :: 0 Stories :: 12 Comments :: 0 Trackbacks

常用链接

留言簿(2)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

poj 3437
这道题不难,不过考察的知识点比较多。
给出深度优先遍历一棵数的数据,求这棵树用左儿子右兄弟的方法变成二叉树后,变化前后的深度。

涉及的知识有:
1. 求树的深度;2. 递归;3. 左儿子右兄弟表示法。
 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 const int maxn=20010;
 6 char s[maxn];
 7 
 8 int dfs(int b,int e,int &d)
 9 {
10     if(b>e) return 0;
11     int i,j,k=b,cnt=1,maxi=0,res,maxd=0,td;
12     int flag;
13     while(k<=e){
14         i=k;
15         flag=(s[k]=='d')?1:-1;
16         while(flag!=0){
17             if(s[++k]=='d') flag++;
18             else flag--;
19         }
20         j=k++;
21         td=0;
22         res=dfs(i+1,j-1,td);
23         if(td>maxd) maxd=td;
24         if(cnt+res>maxi) maxi=cnt+res;
25         cnt++;
26     }
27     d=maxd+1;
28     return maxi;
29 }
30 
31 int main()
32 {
33     int cnt=1;
34     while(true){
35         gets(s);
36         if(s[0]=='#'return 1;
37         int depth=0;
38         int len=strlen(s);
39         int res=dfs(0,len-1,depth);
40         printf("Tree %d: %d => %d\n",cnt++,depth,res);
41     }
42     return 1;
43 }

posted on 2008-05-24 20:34 bon 阅读(500) 评论(0)  编辑 收藏 引用 所属分类: Programming Contest

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


Google PageRank 
Checker - Page Rank Calculator