## 10. TUTORIAL 004 : Create your first subgraph.

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)
{
}
```

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
```

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;
```

### Source Code

```#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) {
}

int main() {
//create an empty graph
Graph *graph=tlp::newGraph();

//build the graph
buildGraph(graph);

//build two empty subgraph

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;
}
```