COIN-OR::LEMON - Graph Library

source: lemon-0.x/src/work/alpar/list_graph_demo.cc @ 401:2d0cccf7cc94

Last change on this file since 401:2d0cccf7cc94 was 401:2d0cccf7cc94, checked in by Alpar Juttner, 16 years ago

Some bugfixes.
Some more docs.

File size: 3.1 KB
Line 
1#include<list_graph.h>
2#include<skeletons/graph.h>
3
4#include <iostream>
5#include <vector>
6
7using namespace hugo;
8
9typedef ListGraph 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 SymListGraph
93 
94  {
95    typedef SymListGraph 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  // Tests for NodeSet and EdgeSet
125 
126  {
127    NodeSet N;
128   
129    typedef EdgeSet<NodeSet> ES;
130   
131    ES E(N);
132    ES F(N);
133    for(int i=0;i<10;i++) G.addNode();
134   
135    for(ES::NodeIt n(E);E.valid(n);E.next(n))
136      for(ES::NodeIt m(E);E.valid(m);E.next(m))
137        if(n!=m) F.addEdge(n,m);
138    for(ES::NodeIt n(F);F.valid(n);F.next(n))
139      for(ES::NodeIt m(F);F.valid(m);F.next(m))
140        if(n<m) F.addEdge(n,m);
141   
142
143    NodeSet::NodeMap<int> nm1(N);
144    ES::NodeMap<int> nm2(E);
145    ES::EdgeMap<int> eme(E);
146    ES::EdgeMap<int> emf(F);
147   
148       
149  }
150 
151}
Note: See TracBrowser for help on using the repository browser.