This tutorial will teach you how to create subgraphs. At the end of it, we will have a hierarchy of 3 graphs.
Before anything consider the following function that creates 3 nodes and 3 edges (same as in tutorial 001 ):
void buildGraph(Graph *graph) { //add three nodes node n1=graph->addNode(); node n2=graph->addNode(); node n3=graph->addNode(); //add three edges graph->addEdge(n2,n3); graph->addEdge(n1,n2); graph->addEdge(n3,n1); }
The creation of a subgraph is quite simple. You just have to use the function Graph* addSubGraph (BooleanProperty* selection = 0)
. It will create and return a new SubGraph of the graph. The elements of the new subgraph are those selected in the selection(selection associated value equals true); if there is no selection an empty subgraph is returned.
In the following sample we create 3 empty subgraphs :
//build three empty subgraphs Graph *subgraph0=graph->addSubGraph(); Graph *subgraph1=graph->addSubGraph(); Graph *subgraph2=subgraph1->addSubGraph();
We now need to create some nodes and edges :
//add node inside subgraphs buildGraph(subgraph0); buildGraph(subgraph1); buildGraph(subgraph2);
Following is the hierarchy we have just created, displayed with tulip :
We can check that by iterating on our graph's subgraphs using the function Iterator< Graph * >* Graph::getSubGraphs()
:
//iterate subgraph (0 and 1 normally ) and output them Iterator<Graph *> *itS=graph->getSubGraphs(); while (itS->hasNext()) cout << itS->next() << endl; delete itS;
#include <iostream> #include <tulip/Graph.h> /** * Tutorial 004 * * Create a graph and three subgraphs, * display all the structure using iterators */ using namespace std; using namespace tlp; void buildGraph(Graph *graph) { //add three nodes node n1=graph->addNode(); node n2=graph->addNode(); node n3=graph->addNode(); //add three edges graph->addEdge(n2,n3); graph->addEdge(n1,n2); graph->addEdge(n3,n1); } int main() { //create an empty graph Graph *graph=tlp::newGraph(); //build the graph buildGraph(graph); //build two empty subgraph Graph *subgraph0=graph->addSubGraph(); Graph *subgraph1=graph->addSubGraph(); Graph *subgraph2=subgraph1->addSubGraph(); //add node inside subgraphs buildGraph(subgraph0); buildGraph(subgraph1); buildGraph(subgraph2); //iterate subgraph (0 and 1 normally ) and output them Iterator<Graph *> *itS=graph->getSubGraphs(); while (itS->hasNext()) cout << itS->next() << endl; delete itS; delete graph; return EXIT_SUCCESS; }