日期:2014-05-20  浏览次数:20729 次

一个树的算法问题,作过的高手赐教
oo                             ooo       o   o   oo   o
  oooo                   ooooo     o   oo   o       o   oo      
o     o       o           o     o   oooooooo   o   oooo
  o         o       o           o           o     oooo   oo       o  

有如上图所示的一个txt文件,由 '空格 '和 'o '构成一幅抽象画,要求生成任意个树(左右和上下相连的‘o’为一个树)。给了如下几个函数,要求实现。但是我现在不知道这些函数都是干什莫用的.

我现在把这个文件里的字符读到了一个数组中,假设这些函数都实现了,谁能告诉我怎末用这些函数生成树.头一次写树的算法,没有思路,请高手指点一二.


    //     This   function   creates   a   tree   with   a   single   node   x      
    public   void   make_set(int   x)
    {

    }

    //   Traverse   parent   pointers   from   x   up   the   tree   until   you   find   the   root   of   the   tree
    public   int   find_set(int   x)
    {
   
    return   0;
    }

    //     This   function   causes   the   root   of   one   tree   (containing   x   or   y   )   to   point   to        
    //     the   root   of   the   other   tree                                                                                                        
    public   void   union_sets(int   x,   int   y)
    {
   
    }

    //   This   function   calculates   and   returns   the   total   number   of   existing   sets,   and        
    //   resets   the   lables   of   these   sets   to   be   integers   started   fron   1   to   final_sets().  
    public   int   final_sets()
    {
    return   0;
    }


------解决方案--------------------
貌似算法逻辑比较复杂,希望楼主不吝笔墨说得清楚些。
------解决方案--------------------
晕 这么复杂的题目?
------解决方案--------------------
LZ首先要把如何从0和空格的图转化为二叉树说清楚,否则是不好做的。
按照你的说法,如果0为节点,叉是什么?上叉、下叉、左叉、右叉,那不是4叉树了吗?或者只分上下为一个叉,左右为一个叉。那对于某个0,它左边有0,右边有0,上面有0,下面有0怎么处理?如何来描述这种情况呢?
那是不是文件中开头总有一个0,这就是数的根。然后向左和向下就分为两个叉了,而不存在右边和上边的问题,因为那已经是上一层了?如果是这样的话,那图的绘制不是随意的,因为随意绘制有可能出现某个孤立的节点,从数的根是没有叉能够访问过去的。
所以还是先请LZ把图和数的转化规则讲清楚了再说!