home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / c / library / dos / diverses / leda / incl / tree_col.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-11-15  |  4.3 KB  |  139 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  2.1.1                                                 11-15-1991
  4. +
  5. +
  6. +  tree_collection.h
  7. +
  8. +
  9. +  Copyright (c) 1991  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15.  
  16.  
  17. #ifndef DYNTREESH
  18. #define DYNTREESH
  19.  
  20. #include <LEDA/basic.h>
  21.  
  22.  /*********************************************************************\
  23.  *                                                                     *
  24.  *  dyna_trees T; deklariert eine (vorerst leere) Menge von dyn_trees  *
  25.  *                                                                     *
  26.  *  d_vertex T.maketree(); Erzeugt einen Baum, der genau einen Knoten  *
  27.  *     enthaelt (der in keinen anderem Baum enthalten ist.             *
  28.  *                                                                     *
  29.  *  d_vertex T.findroot(d_vertex v); Gibt die Wurzel des v enthaltenden*
  30.  *     Baumes zurueck.                                                 *
  31.  *                                                                     *  
  32.  *  d_vertex T.findcost(d_vertex v, double& d); Gibt den entsprechenden*
  33.  *     Knoten zurueck (s.o.), die Kosten werden im Argument d zurueck- *
  34.  *     gegeben.                                                        *
  35.  *                                                                     *
  36.  *  void   T.addcost(d_vertex v, double x); s.o.                       *
  37.  *                                                                     *
  38.  *  void   T.link(d_vertex v, d_vertex w); s.o.                        *
  39.  *                                                                     *
  40.  *  void   T.cut(d_vertex v); s.o.                                     *
  41.  *                                                                     *
  42.  *                                                                     *
  43.  * Implemented by Jan Timm                                             *
  44.  *                                                                     *
  45.  \*********************************************************************/
  46.  
  47.  
  48.  
  49.  
  50.  
  51. class d_node;
  52. typedef d_node *d_vertex;
  53. typedef d_node *d_path;
  54.  
  55. class d_node {
  56.  
  57. friend class dyna_trees;
  58.  
  59.      void*    info;        // user-defined information
  60.  
  61.      d_vertex left,        // linkes Kind
  62.               right,       // rechtes Kind
  63.               parent,      // Elter
  64.               successor,   // Nachfolger (fuer Pfad)
  65.               next;        // fuer Verkettung fuer ~dyna_tree
  66.  
  67.      double dcost,
  68.             dmin;
  69.  
  70.      d_node(void* i) { 
  71.                        left=right=parent=successor=next=0;
  72.                        dcost=dmin=0;
  73.                        info = i;
  74.                       };
  75. OPERATOR_NEW(10);
  76. OPERATOR_DEL(10);
  77.  
  78. };
  79.   
  80.    
  81. class dyna_trees {
  82.      d_vertex first,
  83.             last;  // diese beiden Zeiger fuer ~dyna_tree
  84.  
  85.      void splay(d_vertex);
  86.  
  87.      d_vertex assemble(d_vertex, d_vertex, d_vertex);
  88.      void   disassemble(d_vertex, d_vertex&, d_vertex&);
  89.  
  90.      d_vertex makepath(void*);
  91.      d_vertex findpath(d_vertex);
  92.      d_vertex findpathcost(d_path, double&);
  93.      d_vertex findtail(d_path);
  94.      void   addpathcost(d_path, double);
  95.      d_vertex join(d_path, d_path, d_path);
  96.      void   split(d_vertex, d_vertex&, d_vertex&);
  97.      
  98.      d_path   expose(d_vertex);
  99.  
  100. virtual void copy_inf(ent& x)      { x=x; }
  101. virtual void clear_inf(ent& x)     { x=0; }
  102.  
  103. public:
  104.      dyna_trees() { first=last=0; };
  105.      ~dyna_trees();
  106.  
  107.      void*    inf(d_vertex v) { return v->info; }
  108.        
  109.      d_vertex maketree(void*);
  110.      d_vertex findroot(d_vertex);
  111.      d_vertex findcost(d_vertex, double&);
  112.      void   addcost(d_vertex, double);
  113.      void   link(d_vertex, d_vertex);
  114.      void   cut(d_vertex);
  115. };
  116.  
  117. #define tree_collection(itype)  name2(itype,tree_collection)
  118.  
  119. #define tree_collectiondeclare(itype)\
  120. \
  121. class  tree_collection(itype) : public dyna_trees{\
  122. \
  123. void copy_inf(ent& x)      { x = Copy(*(itype*)&x); }\
  124. void clear_inf(ent& x)     { Clear(*(itype*)&x);    }\
  125. \
  126. public:\
  127. \
  128. d_vertex maketree(itype x)  { return dyna_trees::maketree(Ent(x)); }\
  129. itype    inf(d_vertex v)    { return itype(dyna_trees::inf(v)); }\
  130. \
  131.  tree_collection(itype)() {}\
  132. ~tree_collection(itype)() {}\
  133. \
  134. };
  135.  
  136. #endif
  137.  
  138.