|
Data Structures and Algorithms
with Object-Oriented Design Patterns in C# |
Definition (Connectedness of an Undirected Graph) An undirected graphis connected if there is a path in G between every pair of vertices in
.
Consider the undirected graph shown in Figure
.
It is tempting to interpret this figure as a picture of two graphs.
However, the figure actually represents
the undirected graph
, given by
![]()
Clearly, the graph
is not connected.
For example, there is no path between vertices a and d.
In fact, the graph
consists of two, unconnected parts,
each of which is a connected sub-graph.
The connected sub-graphs of a graph are called connected components .

Figure: An unconnected, undirected graph with two (connected) components.
A traversal of an undirected graph (either depth-first or breadth-first) starting from any vertex will only visit all the other vertices of the graph if that graph is connected. Therefore, there is a very simply way to test whether an undirected graph is connected: Count the number of vertices visited during a traversal of the graph. Only if all the vertices are visited is the graph connected.
Program
shows how this can be implemented.
The IsConnected property of the AbstractGraph class
provides a bool-valued get accessor
that returns true if the graph is connected.

Program: AbstractGraph class IsConnected property.
The property is implemented using a the DepthFirstTraversal method and a visitor that simply counts the number of vertices it visits. The Visit method adds one the count field of the counter each time it is called.
The worst-case running time of the IsConnected property
is determined by the time taken by the DepthFirstTraversal.
Clearly in this case
.
Therefore, the running time of IsConnected is
when adjacency matrices are used to represent the graph
and
when adjacency lists are used.