COIN-OR::LEMON - Graph Library

source: lemon-0.x/src/work/alpar/smart_graph_demo.cc @ 311:6635b11938fe

Last change on this file since 311:6635b11938fe was 185:259540358bbf, checked in by Alpar Juttner, 20 years ago

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 size: 2.6 KB
Line 
1#include<smart_graph.h>
2#include<emptygraph.h>
3
4#include <iostream>
5#include <vector>
6
7using namespace hugo;
8
9typedef SmartGraph Graph;
10//typedef GraphSkeleton Graph;
11
12
13Graph::OutEdgeIt safeFirstOut(const Graph &G, Graph::Node n)
14{
15  return G.valid(n) ? Graph::OutEdgeIt(G,n):INVALID;
16}
17
18int main()
19{
20
21  typedef Graph::Edge Edge;
22  typedef Graph::InEdgeIt InEdgeIt;
23  typedef Graph::OutEdgeIt OutEdgeIt;
24  typedef Graph::EdgeIt EdgeIt;
25  typedef Graph::Node Node;
26  typedef Graph::NodeIt NodeIt;
27 
28  Graph G;
29 
30  {
31    NodeIt n;
32
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
71
72  G.clear();
73 
74  for(int i=0;i<10;i++) G.addNode();
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;
85
86  n = nn;
87 
88  dd = nn;
89 
90  Graph::EdgeMap<int> emap(G);
91
92  // Test of SymSmartGraph
93 
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
109 
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  }
123 
124}
Note: See TracBrowser for help on using the repository browser.