Title: Graphs I
1Graphs I
- Kruse and Ryba
- Chapter 12
2Undirected Graphs
- An undirected graph is a set of nodes and a set
of edges between nodes e.g. - The graph is undirected because its edges do not
have a particular direction.
3Edges
- We sometimes need to refer to the edges ei of a
graph
e0
e5
e1
e2
e4
e3
4Vertices
- We also need to refer to the vertices vj of a
graph
e0
e5
v0
v4
v1
e1
e2
e4
v2
e3
v3
5Undirected Graph Definition
- An undirected graph G (V, E) is a finite set of
vertices V, together with a finite set of edges
E. - Both sets might be empty (no vertices and no
edges), which is called the empty graph. - Each edge has associated with it two vertices.
- If two vertices are connected by an edge, they
are said to be adjacent.
6Undirected Graph Example Subway Map
7Another Undirected Graph vBNS (fast internet
backbone)
8Directed Graphs
- In a directed graph each vertex has an associated
direction e.g. - Each edge is associated with two vertices its
source vertex and target vertex.
9Directed Graph Examples
- Flow graph vertices are pumping stations and
edges are pipelines connecting them. - Task network each project has a number of
component activities called tasks. Each task has
a duration (amount of time needed to complete
task).
10Loops
- A loop is an edge that connects a vertex with
itself for example - Loops can occur in directed graphs or undirected
graphs.
11Multiple Edges
- In principle, a graph may have two or more edges
connecting the same two vertices in the same
direction - These are called multiple edges. In a graph
diagram, each edge is drawn separately.
12Simple Graphs
- A graph is said to be a simple graph, if
- the graph has no loops, and
- no multiple edges
13Path
- A path in a graph is a sequence of vertices, v0,
v1, vm, such that each adjacent pair of
vertices in the list are connected by an edge.
v0
v4
v1
v2
v3
14Path
- A path in a graph is a sequence of vertices, v0,
v1, vm, such that each adjacent pair of
vertices in the list are connected by an edge.
Example path v0, v3, v4
v0
v4
v1
v2
v3
15Path
- A path in a graph is a sequence of vertices, v0,
v1, vm, such that each adjacent pair of
vertices in the list are connected by an edge.
Example path v0, v3, v4 v0, v3, v2, v1, v4
v0
v4
v1
v2
v3
16Path
- In a directed graph, the connection must go from
source vi to target vi1.
Is there a path from v0 to v4? v3 to v1? v1 to
v2? v2 to v1?
v0
v4
v1
v2
v3
17Example Task Network
Investigate neighborhood schools
Find a realtor
Look at homes
3
Investigate termite and soil reports
5
9
Start
Present offer
Choose a home to buy
10
2
Apply for financing and establish price limit
0
2
Prepare offer
15
20
How long will it take to buy a house? (The
duration of each task is shown below each task).
18Critical Path
Investigate neighborhood schools
Find a realtor
Look at homes
3
Investigate termite and soil reports
5
9
Start
Present offer
Choose a home to buy
10
2
Apply for financing and establish price limit
0
2
Prepare offer
15
20
The task will take as long as the maximum
duration path from start to finish.
19Cycles
- A cycle in a graph is a path that leads back to
the first node in the path.
Example cycles v1, v2, v3, v2, v1
v0
v4
v1
v2
v3
20Cycles
- A cycle in a graph is a path that leads back to
the first node in the path.
Example cycles v1, v2, v3, v2, v1 v0, v3, v4,
v1, v0
v0
v4
v1
v2
v3
21Does this graph have any cycles?
22Cycles in Directed Graphs
- A cycle in a directed graph must follow edge
directions e.g.
23DAG Directed Acyclic Graph
- A directed acyclic graph (DAG) must have no
cycles e.g. - In other words, there is no path that starts and
ends at the same node.
24Complete Graph
- An undirected graph which has an edge between
every pair of vertices.
25Connected Graph
- An undirected graph which has a path between
every pair of vertices.
1
2
3
0
26Strongly Connected Graph
- A directed graph which has a path between every
pair of vertices.
27Weakly Connected Graph
- A directed graph which is connected, but not not
strongly connected.
28A DAG that is not Connected
29Connected Components
30Review of Terms
- Undirected vs. directed graphs
- Multiple edges, loops
- Simple graph
- Path
- Cycle
- Directed, acyclic graph (DAG)
- Connected, strongly connected, and weakly
connected graphs - Connected component
31Graph Implementations
32Adjacency Matrix
0 1 2 3
0 1 2 3
2
0
1
3
33Adjacency Matrix
0 1 2 3
0 1 2 3
1
2
0
1
3
34Adjacency Matrix
0 1 2 3
0 1 2 3
1 0
2
0
1
3
35Adjacency Matrix
0 1 2 3
0 1 2 3
1 0 1
2
0
1
3
36Adjacency Matrix
0 1 2 3
0 1 2 3
1 0 1 1
2
0
1
3
37Adjacency Matrix
0 1 2 3
0 1 2 3
1 0 1 1
0 0 0 1
2
0
1
3
38Adjacency Matrix
0 1 2 3
0 1 2 3
1 0 1 1
0 0 0 1
1 0 0 0
2
0
1
3
39Adjacency Matrix
0 1 2 3
0 1 2 3
1 0 1 1
0 0 0 1
1 0 0 0
0 1 0 0
2
0
1
3
40C Adjacency Matrix
0 1 2 3
0 1 2 3
1 0 1 1
0 0 0 1
1 0 0 0
0 1 0 0
2
0
1
3
bool graph_adjacency44
41Adjacency Matrix Weighted Edges
6.0
0 1 2 3
2.5
2
5.8 0 6.0 1.5
0 0 0 2.5
2.5 0 0 0
0 4.2 0 0
0 1 2 3
5.8
0
1
2.5
1.5
3
4.2
double graph_adjacency44
42Weighted Edges An Example
Flights. Whats the cheapest way to fly San
Fransisco ? Boston?
Boston
San Fransisco
452
245
320
Chicago
60
180
Dallas
43Weighted Edges An Example
Mileage for various hops from San Fransisco ?
Boston
Boston
San Fransisco
2800
1200
1800
Chicago
2300
1600
Dallas
Mileage is not real, but for sake of example.
44Weighted Edges An Example
Available internet bandwidth on various paths
between an ADSL provider and customers.
Pat
Fran
100Kbs
1Gbs
500Kbs
100Kbs
ADSL provider
This is a simplication for sake of example,
and bit rates are fictional.
45Adjacency Matrix Undirected Graph
0 1 2 3
0 1 2 3
2
0
1
3
bool graph_adjacency44
46Adjacency Matrix Undirected Graph
0 1 2 3
0 1 2 3
0
0
0
0
2
0
1
3
No loops ? zero diagonal.
47Adjacency Matrix Undirected Graph
0 1 2 3
0 1 2 3
0 1 1 1
0
0
0
2
0
1
3
48Adjacency Matrix Undirected Graph
0 1 2 3
0 1 2 3
0 1 1 1
1 0 0 1
0
0
2
0
1
3
49Adjacency Matrix Undirected Graph
0 1 2 3
0 1 2 3
0 1 1 1
1 0 0 1
1 0 0 0
0
2
0
1
3
50Adjacency Matrix Undirected Graph
0 1 2 3
0 1 2 3
0 1 1 1
1 0 0 1
1 0 0 0
1 1 0 0
2
0
1
3
51Symmetry of Adjacency Matrix of Undirected Graph
0 1 2 3
0 1 2 3
0 1 1 1
1 0 0 1
1 0 0 0
1 1 0 0
2
0
1
3
aij aji
52Non-symmetric Adjacency Matrix for Directed Graph
0 1 2 3
0 1 2 3
1 0 1 1
0 0 0 1
1 0 0 0
0 1 0 0
2
0
1
3
aij? aji
53Symmetric Adjacency Matrix
- An undirected graph will always have a symmetric
adjacency matrix. - A directed graph may not have a symmetric
adjacency matrix. - If a directed graph has a symmetric matrix, what
does that mean?
54Non-symmetric Adjacency Matrix Unweighted
Directed Graph
0 1 2 3
0 1 2 3
1 0 1 1
0 0 0 1
1 0 0 0
0 1 0 0
2
0
1
3
aij? aji
55Add an Edge
0 1 2 3
0 1 2 3
1 0 1 1
0 0 0 1
1 0 0 0
1 1 0 0
2
0
1
3
aijaji
56Adjacency Matrix for Weighted Directed Graph
3
0 1 2 3
0 1 2 3
5 0 3 6
0 0 0 4
3 0 0 0
6 4 0 0
2
3
2
0
5
1
6
4
3
6
4
aijaji
57Time Complexity Analysis
- Given N we have vertices in a graph, and we use
the adjacency matrix representation. - What is the worst case and average complexity of
inserting an edge in the graph? - What is the worst case and average complexity of
removing an edge in the graph? - What is the complexity of retrieving a list of
all nodes that share and edge with a particular
vertex?
58Representing Graphs with Edge Lists
2
Edge list for vertex 0
Edge list for vertex 1
Edge list for vertex 2
Edge list for vertex 3
0
1
Null
2
0
1
3
Null
Null
3
Null
59Time Complexity Analysis
- Given N we have vertices in a graph, and we use
the edge list representation. - What is the worst case and average complexity of
inserting an edge in the graph? - What is the worst case and average complexity of
removing an edge in the graph? - What is the complexity of retrieving a list of
all nodes that share and edge with a particular
vertex?
60Representing Graphs with Edge Sets
Assume a Set template class is available Declare
array of sets, one per node in graph Setltintgt
connectionsN Each nodes set contains the
indices of all vertices that it is connected to.
2
0
1
3
61Time Complexity Analysis
- Given N we have vertices in a graph, and we use
the edge set representation. - What is the worst case and average complexity of
inserting an edge in the graph? - What is the worst case and average complexity of
removing an edge in the graph? - What is the complexity of retrieving a list of
all nodes that share and edge with a particular
vertex?
62Graph Implementations Summary
- Adjacency matrix
- Edge lists
- Edge sets
63Graph Searching
64Graph Search
- Choice of container
- If a stack is used as the container for adjacent
vertices, we get depth first search. - If a list is used as the container adjacent
vertices, we get breadth first search.
65Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
66Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
s
0
2
5
3
Q ?
67Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
s
0
2
5
3
Q ?
68Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
s
0
2
5
3
Q
0
69Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
u
Q
0
70Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
u
Q
0
1
71Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
u
Q
0
1
2
72Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
u
Q
0
1
2
3
73Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
u
Q
0
1
2
3
74Breadth First Algorithm
u
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
Q
0
1
2
3
75Breadth First Algorithm
u
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
Q
0
1
2
3
4
76Breadth First Algorithm
u
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
Q
0
1
2
3
4
77Breadth First Algorithm
u
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
Q
0
1
2
3
4
78Breadth First Algorithm
u
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
Q
0
1
2
3
4
79Breadth First Algorithm
u
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
Q
0
1
2
3
4
80Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
u
Q
0
1
2
3
4
81Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
u
Q
0
1
2
3
4
5
82Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
u
Q
0
1
2
3
4
5
83Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
u
Q
0
1
2
3
4
5
84Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
u
Q
0
1
2
3
4
5
85Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
Q
u
0
1
2
3
4
5
86Breadth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a queue Q
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- Q? s
- While Q ? ?
-
- u ? headQ
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Enqueue(Q,v)
-
- Dequeue(Q)
- coloru ? black
-
-
1
4
0
2
5
3
Q ?
u
87Graph Search
- Choice of container
- If a stack is used as the container for adjacent
vertices, we get depth first search. - If a list is used as the container adjacent
vertices, we get breadth first search.
88Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
s
0
2
5
3
S ?
89Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
s
0
2
5
3
S ?
90Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
s
0
2
5
3
S ?
0
91Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
5
u
3
S ?
92Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
5
u
3
S ?
1
93Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
5
u
3
S ?
3
2
1
94Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
5
u
3
S ?
3
2
1
95Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
5
u
3
S ?
3
2
1
96Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
5
3
u
S ?
3
2
1
97Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
5
3
u
S ?
3
2
1
5
98Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
5
3
u
S ?
3
2
1
5
99Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
5
3
u
S ?
3
5
2
1
100Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
5
3
u
S ?
3
5
2
1
4
101Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
5
3
u
S ?
3
5
2
1
4
102Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
u
5
3
S ?
4
3
5
2
1
103Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
u
5
3
S ?
4
3
5
2
1
104Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
u
5
3
S ?
4
3
5
2
1
105Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
u
5
3
S ?
4
3
5
2
1
106Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
u
5
3
S ?
107Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
u
5
3
S ?
108Graph Search
- Choice of container
- If a stack is used as the container for adjacent
vertices, we get depth first search. - If a list is used as the container adjacent
vertices, we get breadth first search.
109Depth First Algorithm
- Given graph G(V,E) and source vertex s ? V
- Create a stack S
- For each vertex u ? V s
- coloru ? white
- colors ? gray
- S? s
- While S ? ?
-
- u Pop(S)
- for each v ? Adjacentu
- if colorv white
-
- colorv ? gray
- Push(S,v)
-
- coloru ? black
-
-
-
1
4
0
2
u
5
3
S ?