COIN-OR::LEMON - Graph Library

Ignore:
Timestamp:
03/13/04 23:53:07 (20 years ago)
Author:
Alpar Juttner
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@261
Message:

Dynamic maps became the defaults.
Maps got copy constructors and operator=. Also work between different types.
SymSmartGraph? added
smart_graph_demo.cc was extended.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/work/alpar/smart_graph_demo.cc

    r164 r185  
    77using namespace hugo;
    88
    9 //typedef SmartGraph Graph;
    10 typedef EmptyGraph Graph;
     9typedef SmartGraph Graph;
     10//typedef GraphSkeleton Graph;
    1111
    1212
     
    2727 
    2828  Graph G;
    29   NodeIt n;
     29 
     30  {
     31    NodeIt n;
    3032
     33    for(int i=0;i<10;i++) G.addNode();
     34    for(G.first(n);G.valid(n);G.next(n))
     35      for(NodeIt m(G);m!=INVALID;G.next(m))
     36        if(n!=m) G.addEdge(n,m);
     37   
     38    OutEdgeIt e = safeFirstOut(G,n);
     39    OutEdgeIt f = safeFirstOut(G,NodeIt(G));
     40   
     41   
     42    InEdgeIt i(INVALID), j;
     43    InEdgeIt ii(i);
     44    ii=G.first(i,n);
     45    ii=G.next(i);
     46   
     47    OutEdgeIt o(INVALID), oo;
     48    OutEdgeIt ooo(oo);
     49    oo=G.first(o,n);
     50    oo=G.next(o);
     51   
     52    EdgeIt ei(INVALID), eie;
     53    EdgeIt eiee(ei);
     54    eie=G.first(ei);
     55    eie=G.next(ei);
     56   
     57    Edge eee(i);
     58    eee=o;
     59    eee=eie;
     60   
     61   
     62    bool tm;
     63    tm = G.valid(n) && G.valid(i) && G.valid(o) && G.valid(ei);
     64   
     65    std::vector<InEdgeIt> v(10);
     66    std::vector<InEdgeIt> w(10,INVALID);
     67   
     68  }
     69 
     70  // Test of maps
    3171
     72  G.clear();
     73 
    3274  for(int i=0;i<10;i++) G.addNode();
    33   for(G.first(n);G.valid(n);G.next(n))
    34     for(NodeIt m(G);m!=INVALID;G.next(m))
    35       if(n!=m) G.addEdge(n,m);
     75  for(NodeIt i(G);G.valid(i);G.next(i))
     76    for(NodeIt j(G);G.valid(j);G.next(j))
     77      if(i<j) G.addEdge(i,j);           //The iterators are comparable
     78 
     79  Graph::NodeMap<int> n(G);
     80  int count=0;
     81  for(NodeIt i(G);G.valid(i);G.next(i)) n[i]=count++;
     82 
     83  Graph::NodeMap<int> nn=n;
     84  Graph::NodeMap<double> dd=n;
    3685
    37   OutEdgeIt e = safeFirstOut(G,n);
    38   OutEdgeIt f = safeFirstOut(G,NodeIt(G));
     86  n = nn;
    3987 
     88  dd = nn;
     89 
     90  Graph::EdgeMap<int> emap(G);
    4091
    41   InEdgeIt i(INVALID), j;
    42   InEdgeIt ii(i);
    43   ii=G.first(i,n);
    44   ii=G.next(i);
     92  // Test of SymSmartGraph
    4593 
    46   OutEdgeIt o(INVALID), oo;
    47   OutEdgeIt ooo(oo);
    48   oo=G.first(o,n);
    49   oo=G.next(o);
     94  {
     95    typedef SymSmartGraph Graph;
     96    typedef Graph::Edge Edge;
     97    typedef Graph::InEdgeIt InEdgeIt;
     98    typedef Graph::OutEdgeIt OutEdgeIt;
     99    typedef Graph::EdgeIt EdgeIt;
     100    typedef Graph::Node Node;
     101    typedef Graph::NodeIt NodeIt;
     102
     103    Graph G;
     104
     105    for(int i=0;i<10;i++) G.addNode();
     106    for(NodeIt i(G);G.valid(i);G.next(i))
     107      for(NodeIt j(G);G.valid(j);G.next(j))
     108        if(i<j) G.addEdge(i,j);           //The iterators are comparable
    50109 
    51   EdgeIt ei(INVALID), eie;
    52   EdgeIt eiee(ei);
    53   eie=G.first(ei);
    54   eie=G.next(ei);
    55 
    56   Edge eee(i);
    57   eee=o;
    58   eee=eie;
    59  
    60  
    61   bool tm;
    62   tm = G.valid(n) && G.valid(i) && G.valid(o) && G.valid(ei);
    63 
    64   std::vector<InEdgeIt> v(10);
    65   std::vector<InEdgeIt> w(10,INVALID);
     110    Graph::EdgeMap<int> em(G);
     111    Graph::SymEdgeMap<int> sm(G);
     112    for(EdgeIt e(G);G.valid(e);G.next(e)) em[e]=G.id(e);
     113    for(EdgeIt e(G);G.valid(e);G.next(e))
     114      if(G.tail(e)<G.head(e)) sm[e]=G.id(e);
     115   
     116    for(EdgeIt e(G);G.valid(e);G.next(e))
     117      std::cout << G.id(G.tail(e)) << "->" << G.id(G.head(e))
     118                << ": id=" << G.id(e) << " oppid=" << G.id(G.opposite(e))
     119                << " em=" << em[e]
     120                << " sm=" << sm[e] << "\n";
     121   
     122  }
    66123 
    67124}
Note: See TracChangeset for help on using the changeset viewer.