Traverse graph by following adjacent nodes
[disc, pred, closed] = graphtraverse(G, S)
[...] = graphtraverse(G, S, ...'Depth', DepthValue, ...)
[...] = graphtraverse(G, S, ...'Directed', DirectedValue, ...)
[...] = graphtraverse(G, S, ...'Method', MethodValue, ...)
G | N-by-N sparse matrix that represents a directed graph. Nonzero
entries in matrix G indicate the presence
of an edge. |
S | Integer that indicates the source node in graph G. |
DepthValue | Integer that indicates a node in graph G that
specifies the depth of the search. Default is Inf (infinity). |
DirectedValue | Property that indicates whether graph G is
directed or undirected. Enter false for an undirected
graph. This results in the upper triangle of the sparse matrix being
ignored. Default is true. |
MethodValue | Character vector or string that specifies the algorithm used to traverse the graph. Choices are:
|
Tip
For introductory information on graph theory functions, see Graph Theory Functions.
[ traverses graph disc, pred, closed] = graphtraverse(G, S)G starting
from the node indicated by integer S. G is
an N-by-N sparse matrix that represents a directed graph. Nonzero
entries in matrix G indicate the presence
of an edge. disc is a vector of node indices
in the order in which they are discovered. pred is
a vector of predecessor node indices (listed in the order of the node
indices) of the resulting spanning tree. closed is
a vector of node indices in the order in which they are closed.
[...] = graphtraverse( calls G, S, ...'PropertyName', PropertyValue, ...)graphtraverse with
optional properties that use property name/property value pairs. You
can specify one or more properties in any order. Each PropertyName must
be enclosed in single quotes and is case insensitive. These property
name/property value pairs are as follows:
[...] = graphtraverse( specifies the depth of the search. G, S, ...'Depth', DepthValue, ...)DepthValue is
an integer indicating a node in graph G.
Default is Inf (infinity).
[...] = graphtraverse( indicates whether the graph
is directed or undirected. Set G, S, ...'Directed', DirectedValue, ...)DirectedValue to false for
an undirected graph. This results in the upper triangle of the sparse
matrix being ignored. Default is true.
[...] = graphtraverse( lets you specify the algorithm
used to traverse the graph. Choices are:G, S, ...'Method', MethodValue, ...)
'BFS' — Breadth-first search.
Time complexity is O(N+E), where N and E are
number of nodes and edges respectively.
'DFS' — Default algorithm.
Depth-first search. Time complexity is O(N+E),
where N and E are number of
nodes and edges respectively.
Create a directed graph with 10 nodes and 12 edges.
DG = sparse([1 2 3 4 5 5 5 6 7 8 8 9],...
[2 4 1 5 3 6 7 9 8 1 10 2],true,10,10)
DG =
(3,1) 1
(8,1) 1
(1,2) 1
(9,2) 1
(5,3) 1
(2,4) 1
(4,5) 1
(5,6) 1
(5,7) 1
(7,8) 1
(6,9) 1
(8,10) 1
h = view(biograph(DG))
Biograph object with 10 nodes and 12 edges.
Traverse the graph to find the depth-first search (DFS) discovery order starting at node 4.
order = graphtraverse(DG,4)
order =
4 5 3 1 2 6 9 7 8 10
Label the nodes with the DFS discovery order.
for i = 1:10 h.Nodes(order(i)).Label =... sprintf('%s:%d',h.Nodes(order(i)).ID,i); end h.ShowTextInNodes = 'label' dolayout(h)

Traverse the graph to find the breadth-first search (BFS) discovery order starting at node 4.
order = graphtraverse(DG,4,'Method','BFS') order = 4 5 3 6 7 1 9 8 2 10
Label the nodes with the BFS discovery order.
for i = 1:10 h.Nodes(order(i)).Label =... sprintf('%s:%d',h.Nodes(order(i)).ID,i); end h.ShowTextInNodes = 'label' dolayout(h)

Find and color nodes that are close to (within two edges of) node 4.
node_idxs = graphtraverse(DG,4,'depth',2) node_idxs = 4 5 3 6 7 set(h.nodes(node_idxs),'Color',[1 0 0])

[1] Sedgewick, R., (2002). Algorithms in C++, Part 5 Graph Algorithms (Addison-Wesley).
[2] Siek, J.G., Lee, L-Q, and Lumsdaine, A. (2002). The Boost Graph Library User Guide and Reference Manual, (Upper Saddle River, NJ:Pearson Education).
graphallshortestpaths | graphconncomp | graphisdag | graphisomorphism | graphisspantree | graphmaxflow | graphminspantree | graphpred2path | graphshortestpath | graphtopoorder | traverse