## Chapter 12. Working with the Algorithms Graph Structure

Creating Graphs and Graph Elements
Graph Structure Functionality
Graph Elements
Class Node
Class Edge
Complexity
Hiding Graph Elements
Copying a Graph
Events and Listeners
Structural Changes
Iteration Mechanisms
Language Constructs for Iteration
Cursors
Iteration and Element Removal
Alternative Iteration Techniques
Containers
High-Level Features
Low-Level Features
Binding Data to Graph Elements
Maps and Data Providers
Default Map Implementations
Creating Customized Data Accessors
Notes

This chapter presents first steps to using the yFiles for Silverlight algorithms graph structure and outlines general programming aspects. It explains technical consequences of some of the concepts in more detail. Also, it introduces well-known graph analyzing algorithms indispensable to the serious graph worker.

## Creating Graphs and Graph Elements

Class Graph offers three constructors, one to create an empty graph, i.e., one where node and edge set are empty, the other two to create new instances which are either partial or complete copies of an already existing graph.

```// Create a new, empty graph.
Graph graph = new Graph();

// Create a complete copy of 'graph'.
Graph graphCopy = new Graph(graph);
```

It is also possible to ask an instance of type Graph to create a complete copy of itself or to create a new empty graph instance.

When populating an existing graph with graph elements, it is important to observe certain preconditions:

• Only class Graph provides methods to create nodes and edges.
• To create an edge in a graph G it is necessary that both its source node and its target node already exist in G.

```// 'graph' is of type yWorks.yFiles.Algorithms.Graph.

// Create 10 nodes.
Node[] n = new Node;
for (int i = 0; i < 10; i++) {
n[i] = graph.CreateNode();
}

// Create 5 edges. Each edge has "even" source node and "odd" target node.
Edge[] e = new Edge;
for (int i = 0, j = 0; i < 10; i += 2, j++) {
e[j] = graph.CreateEdge(n[i], n[i + 1]);
}
```

### Important

Note that the code snippets presented in the course of this document serve as examples to demonstrate how to use the functionality yFiles provides. Although they are all correct, they are not complete and will most likely not compile when copied directly.