File: tutorial002f.cpp

package info (click to toggle)
tulip 6.0.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 196,224 kB
  • sloc: cpp: 571,851; ansic: 13,983; python: 4,105; sh: 1,555; yacc: 522; xml: 484; makefile: 168; pascal: 148; lex: 55
file content (149 lines) | stat: -rw-r--r-- 3,336 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <iostream>
#include <tulip/TlpTools.h>
#include <tulip/Graph.h>
#include <tulip/ForEach.h>

/**
 * Tutorial 002f
 *
 * Create a graph
 * display all the structure using for/forEach loops
 *
 */

using namespace std;
using namespace tlp;

void buildGraph(Graph *graph) {
  // add three nodes
  node n0 = graph->addNode();
  node n1 = graph->addNode();
  node n2 = graph->addNode();
  // add three edges
  graph->addEdge(n1, n2);
  graph->addEdge(n0, n1);
  graph->addEdge(n2, n0);
}

int main() {
  // initialize the Tulip libs
  initTulipLib();

  // create an empty graph
  Graph *graph = newGraph();

  // build the graph
  buildGraph(graph);

  bool first = true;

  //===========================
  // go through all nodes and display the structure
  for (auto n : graph->nodes()) {
    cout << "node: " << n.id << endl;
    cout << " degree: " << graph->deg(n) << endl;
    cout << " in-degree: " << graph->indeg(n) << endl;
    cout << " out-degree: " << graph->outdeg(n) << endl;

    //===========================
    // go through all ancestors of a node
    cout << " predecessors: {";
    for (auto in_node : graph->getInNodes(n)) {
      if (!first) {
        cout << ",";
      } else {
        first = false;
      }
      cout << in_node.id;
    }
    cout << "}" << endl;
    first = true;

    //===========================
    // go through all successors of a node
    cout << " successors: {";
    node out_node;
    forEach (out_node, graph->getOutNodes(n)) {
      if (!first) {
        cout << ",";
      } else {
        first = false;
      }
      cout << out_node.id;
    }
    cout << "}" << endl;
    first = true;

    //===========================
    // go through the neighborhood of a node
    cout << " neighborhood: {";
    node in_out_node;
    forEach (in_out_node, graph->getInOutNodes(n)) {
      if (!first) {
        cout << ",";
      } else {
        first = false;
      }
      cout << in_out_node.id;
    }
    cout << "}" << endl;
    first = true;

    //===========================
    // go through the incoming edges
    cout << " incoming edges: {";
    edge in_edge;
    forEach (in_edge, graph->getInEdges(n)) {
      if (!first) {
        cout << ",";
      } else {
        first = false;
      }
      cout << in_edge.id;
    }
    cout << "}" << endl;
    first = true;

    //===========================
    // go through the outcoming edges
    cout << " outcoming edges: {";
    edge out_edge;
    forEach (out_edge, graph->getOutEdges(n)) {
      if (!first) {
        cout << ",";
      } else {
        first = false;
      }
      cout << out_edge.id;
    }
    cout << "}" << endl;
    first = true;

    //===========================
    // go through the adjacent edges
    cout << " adjacent edges: {";
    edge in_out_edge;
    forEach (in_out_edge, graph->getInOutEdges(n)) {
      if (!first) {
        cout << ",";
      } else {
        first = false;
      }
      cout << in_out_edge.id;
    }
    cout << "}" << endl;
    first = true;
  }

  //===========================
  // go through all edges
  for (auto e : graph->edges()) {
    cout << "edge: " << e.id;
    cout << " source: " << graph->source(e).id;
    cout << " target: " << graph->target(e).id;
    cout << endl;
  }

  delete graph; // delete the entire graph
  return EXIT_SUCCESS;
}