PowerPoint Presentation
Graphs
Chapter 20
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Contents
Terminology
Graphs as ADTs
Graphs as ADTs
Applications of Graphs
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Terminology
Definition:
A set of points that are joined by lines
Graphs also represent the relationships among data items
G = { V , E }; that is, a graph is a set of vertices and edges
A subgraph consists of a subset of a graph’s vertices and a subset of its edges
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Terminology
FIGURE 20-1 An ordinary line graph
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Terminology
FIGURE 20-2 (a) A campus map as a graph;
(b) a subgraph
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Terminology
FIGURE 20-3 Graphs that are (a) connected;
(b) disconnected; and (c) complete
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Terminology
FIGURE 20-4 (a) A multigraph is not a graph;
(b) a self edge is not allowed in a graph
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Terminology
Simple path: passes through vertex only once
Cycle: a path that begins and ends at same vertex
Simple cycle: cycle that does not pass through other vertices more than once
Connected graph: each pair of distinct vertices has a path between them
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Terminology
Complete graph: each pair of distinct vertices has an edge between them
Graph cannot have duplicate edges between vertices
Multigraph: does allow multiple edges
When labels represent numeric values, graph is called a weighted graph
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Terminology
Undirected graphs: edges do not indicate a direction
Directed graph, or digraph: each edge has a direction
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Terminology
FIGURE 20-5 (a) A weighted graph;
(b) a directed graph
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Graphs as ADTs
ADT graph operations
Test whether graph is empty.
Get number of vertices in a graph.
Get number of edges in a graph.
See whether edge exists between two given vertices.
Insert vertex in graph whose vertices have distinct values that differ from new vertex’s value.
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Graphs as ADTs
ADT graph operations, ctd.
Insert edge between two given vertices in graph.
Remove specified vertex from graph and any edges between the vertex and other vertices.
Remove edge between two vertices in graph.
Retrieve from graph vertex that contains given value.
View interface for undirected, connected graphs, Listing 20-1
.htm code listing files must be in the same folder as the .ppt files for these links to work
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Implementing Graphs
FIGURE 20-6 (a) A directed graph and
(b) its adjacency matrix
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Implementing Graphs
FIGURE 20-7 (a) A weighted undirected graph and
(b) its adjacency matrix
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Implementing Graphs
FIGURE 20-8 (a) A directed graph and
(b) its adjacency list
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Implementing Graphs
FIGURE 20-9 (a) A weighted undirected graph and
(b) its adjacency list
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Graph Traversals
Visits all of the vertices that it can reach
Happens if and only if graph is connected
Connected component is subset of vertices visited during traversal that begins at given vertex
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Depth-First Search
Goes as far as possible from a vertex before backing up
Recursive algorithm
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Depth-First Search
Iterative algorithm, using a stack
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Depth-First Search
Iterative algorithm, using a stack, ctd.
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Depth-First Search
FIGURE 20-10 Visitation order for (a) a depth-first search; (b) a breadth-first search
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Depth-First Search
FIGURE 20-11 A connected graph with cycles
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Depth-First Search
FIGURE 20-12 The results of a depth-first traversal, beginning at vertex a , of the graph in Figure 20-11
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Breadth-First Search
Visits all vertices adjacent to vertex before going forward
See Figure 20-10b
Breadth-first search uses a queue
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Breadth-First Search
FIGURE 20-13 The results of a breadth-fi rst traversal, beginning at vertex a, of the graph in Figure 20-11
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Applications of Graphs
FIGURE 20-14 A directed graph without cycles
Topological Sorting
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Applications of Graphs
FIGURE 20-15 The graph in Figure 20-14 arranged according to the topological orders (a) a, g,
d, b, e, c, f and (b) a, b, g, d, e, f, c
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Applications of Graphs
Topological sorting algorithm
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Applications of Graphs
FIGURE 20-16 A trace of topSort1 for the
graph in Figure 20-14
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Applications of Graphs
FIGURE 20-16 A trace of topSort1 for the
graph in Figure 20-14
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Applications of Graphs
FIGURE 20-16 A trace of topSort1 for the
graph in Figure 20-14
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Applications of Graphs
FIGURE 20-16 A trace of topSort1 for the
graph in Figure 20-14
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Applications of Graphs
FIGURE 20-17 A trace of topSort2 for the
graph in Figure 20-14
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Spanning Trees
Tree: an undirected connected graph without cycles
Observations about undirected graphs
Connected undirected graph with n vertices must have at least n – 1 edges.
Connected undirected graph with n vertices, exactly n – 1 edges cannot contain a cycle
A connected undirected graph with n vertices, more than n – 1 edges must contain at least one cycle
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Spanning Trees
FIGURE 20-20 The DFS spanning tree rooted at vertex a for the graph in Figure 20-11
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Spanning Trees
DFS spanning tree algorithm
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Spanning Trees
BFS spanning
tree algorithm
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Spanning Trees
FIGURE 20-21 The BFS spanning tree rooted at vertex a for the graph in Figure 20-11
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Minimum Spanning Trees
FIGURE 20-22 A weighted, connected, undirected graph
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Minimum Spanning Trees
Minimum spanning tree algorithm
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Minimum Spanning Trees
FIGURE 20-23 A trace of primsAlgorithm for the graph in Figure 20-22 , beginning at vertex a
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Minimum Spanning Trees
FIGURE 20-23 A trace of primsAlgorithm for the graph in Figure 20-22 , beginning at vertex a
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Minimum Spanning Trees
FIGURE 20-23 A trace of primsAlgorithm for the graph in Figure 20-22 , beginning at vertex a
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Shortest Paths
Shortest path between two vertices in a weighted graph has smallest edge-weight sum
FIGURE 20-24 (a) A weighted directed graph
and (b) its adjacency matrix
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Shortest Paths
Dijkstra’s shortest-path algorithm
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Shortest Paths
FIGURE 20-25 A trace of the shortest-path algorithm applied to the graph in Figure 20-24 a
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Shortest Paths
FIGURE 20-26 Checking weight [u] by examining the graph: (a) weight [2] in step 2; (b) weight [1] in step 3;
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Shortest Paths
FIGURE 20-26 Checking weight [u] by examining the graph(c) weight [3] in step 3; (d) weight [3] in step 4
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Shortest Paths
Dijkstra’s shortest-path algorithm, ctd.
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Shortest Paths
FIGURE 20-25 A trace of the shortest-path algorithm applied to the graph in Figure 20-24 a
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Shortest Paths
FIGURE 20-26 Checking weight [u] by examining the graph: (a) weight [2] in step 2; (b) weight [1] in step 3;
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Shortest Paths
FIGURE 20-26 Checking weight [u] by examining the graph: (c) weight [3] in step 3; (d) weight [3] in step 4
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Circuits
Another name for a type of cycle common in statement of certain problems
Circuits either visit every vertex once or visit every edge once
An Euler circuit begins at a vertex v, passes through every edge exactly once, and terminates at v
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Circuits
FIGURE 20-27 (a) Euler’s bridge problem and
(b) its multigraph representation
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Circuits
FIGURE 20-28 Pencil and paper drawings
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Circuits
FIGURE 20-29 Connected undirected graphs based on the drawings in Figure 20-28
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Circuits
FIGURE 20-30 The steps to determine an Euler circuit for the graph in Figure 20-29 b
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Circuits
FIGURE 20-30 The steps to determine an Euler circuit for the graph in Figure 20-29 b
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Some Difficult Problems
Hamilton circuit
Path that begins at a vertex v, passes through every vertex in the graph exactly once, and terminates at v .
The traveling salesperson problem
Variation of Hamilton circuit
Involves a weighted graph that represents a road map
Circuit traveled must be the least expensive
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Some Difficult Problems
FIGURE 20-31 The three utilities problem
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Some Difficult Problems
Planar graph
Can draw it in a plane in at least one way so that no two edges cross
The four-color problem
Given a planar graph, can you color the vertices so that no adjacent vertices have the same color, if you use at most four colors?
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Some Difficult Problems
Describe the graphs in Figure 20-32 . For example, are they directed? Connected? Complete? Weighted?
Use the depth-first strategy and the breadth-first strategy to traverse the graph in Figure 20-32 a, beginning with vertex 0. List the vertices in the order in which each traversal visits them.
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Some Difficult Problems
Write the adjacency matrix for the graph in Figure 20-32 a.
Add an edge to the directed graph in Figure 20-14 that runs from vertex d to vertex b. Write all possible topological orders for the vertices in this new graph.
Is it possible for a connected undirected graph with fi ve vertices and four edges to contain a simple cycle? Explain.
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Some Difficult Problems
Draw the DFS spanning tree whose root is vertex 0 for the graph in Figure 20-33 .
Draw the minimum spanning tree whose root is vertex 0 for the graph in Figure 20-33 .
What are the shortest paths from vertex 0 to each vertex of the graph in Figure
20-24 a? (Note the weights of these paths in Figure 20-25 .)
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Some Difficult Problems
FIGURE 20-32 Graphs for Checkpoint
Questions 1, 2, and 3
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
Some Difficult Problems
FIGURE 20-33 A graph for Checkpoint Questions 6
and 7 and for Exercises 1 and 4
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013
End
Chapter 20
Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013