edge_set.h
上传用户:gzelex
上传日期:2007-01-07
资源大小:707k
文件大小:2k
开发平台:

MultiPlatform

  1. /*******************************************************************************
  2. +
  3. +  LEDA-R  3.2.3
  4. +
  5. +  edge_set.h
  6. +
  7. +  Copyright (c) 1995  by  Max-Planck-Institut fuer Informatik
  8. +  Im Stadtwald, 66123 Saarbruecken, Germany     
  9. +  All rights reserved.
  10. *******************************************************************************/
  11. #ifndef LEDA_EDGE_SET_H
  12. #define LEDA_EDGE_SET_H
  13. #include <LEDA/graph.h>
  14. //------------------------------------------------------------------------------
  15. // edge_set  
  16. //------------------------------------------------------------------------------
  17. /*{Manpage {edge_set} {} {Sets of Edges} }*/
  18. class edge_set 
  19. {
  20. /*{Mdefinition
  21. An instance $S$ of the data type $edge_set$ is a subset of
  22. the edges of a graph $G$. $S$ is said to be valid for the
  23. edges of $G$.}*/
  24.   graph* g;
  25.   list<edge> L;
  26.   edge_array<list_item> A;
  27. public:
  28. /*{Mcreation S }*/
  29. edge_set(const graph& G) :A(G,nil) { g = (graph*)&G; }
  30. /*{Mcreate creates an instance $S$ of type $edge_set$ valid for all edges 
  31.             currently in graph $G$ and initializes it to the empty set.}*/ 
  32. virtual ~edge_set()  { }
  33. /*{Moperations 1.3 4 }*/
  34. void insert(edge x)  { if (A[x] == nil) A[x] = L.append(x); }
  35. /*{Mop     adds edge $x$ to $S$. }*/
  36. void del(edge x)     { if (A[x] != nil) { L.del(A[x]); A[x] = nil;} }
  37. /*{Mop       removes edge $x$ from $S$. }*/
  38. bool member(edge x)      { return (A[x] != nil); }
  39. /*{Mop       returns true if $x$ in $S$, false otherwise. }*/
  40. edge choose()  const     { return L.head(); }
  41. /*{Mop       returns an edge of $S$. }*/
  42. int  size()    const     { return L.length(); }
  43. /*{Mop       returns the size of $S$. }*/
  44. bool empty()   const     { return L.empty(); }
  45. /*{Mop       returns true iff $S$ is the empty set. }*/
  46. void clear()             { L.clear(); A.init(*g,nil); }
  47. /*{Mop       makes $S$ the empty set. }*/
  48. };
  49. /*{Mimplementation
  50. An edge set $S$ for a graph $G$ is implemented by a combination of a 
  51. list  $L$ of edges and an edge array of list_items 
  52. associating with each edge its position in $L$. All operations 
  53. take constant time, except for clear which takes time $O(|S|)$. The space 
  54. requirement is $O(n)$, where $n$ is the number of edges of $G$.}*/
  55. #endif