Professional Documents
Culture Documents
edge
08-07-2006 2
Representation of Graphs
• Adjacency Matrix
– A V x V array, with matrix[i][j] storing
whether there is an edge between the ith
vertex and the jth vertex
• Adjacency Linked List
– One linked list per vertex, each storing
directly reachable vertices
• Edge List
08-07-2006 3
Representation of Graphs
Adjacency Adjacency Edge List
Matrix Linked List
Memory O(V2) O(V+E) O(V+E)
Storage
Check O(1) O(deg(u)) O(deg(u))
whether
(u,v) is an
edge
Find all O(V) O(deg(u)) O(deg(u))
adjacent
vertices of a
vertex u
deg(u): the number of edges connecting vertex u
08-07-2006 4
Graph Searching
• Why do we do graph searching?
What do we search for?
• What information can we find from
graph searching?
• How do we search the graph? Do we
need to visit all vertices? In what
order?
08-07-2006 5
Depth-First Search (DFS)
• Strategy: Go as far as you can (if
you have not visit there), otherwise,
go back and try another way
08-07-2006 6
Implementation
DFS (vertex u) {
mark u as visited
for each vertex v directly reachable from u
if v is unvisited
DFS (v)
}
08-07-2006 8
Example: Teacher’s Problem
• Emily wants to distribute candies to
N students one by one, with a rule
that if student A is teased by B, A
can receive candy before B.
• Given lists of students teased by
each students, find a possible
sequence to give the candies
08-07-2006 9
Shortest Paths?
• Given vertices s and t, if we try to
find a path from s to t by DFS, the
first path found may not be the
shortest one.
• How can I find a shortest path?
08-07-2006 10
An Idea of What We Did
1. Start by visiting a certain vertex
2. Vertices fall into 3 categories:
– Unvisited
– Visited
– Visited & Dead (All reachable vertices
from these vertices are visited)
08-07-2006 11
An Idea of What We Did
3. Find unvisited vertices by
expanding your path from visited
(but not dead) vertices.
08-07-2006 12
Breadth-First Search (BFS)
• Instead of going as far as possible,
BFS tries to search all paths.
• BFS makes use of a queue to store
visited (but not dead) vertices,
expanding the path from the earliest
visited vertices.
08-07-2006 13
Simulation of BFS
• Queue: 1 4 3 5 2 6
1 3 6
2
5
08-07-2006 14
Implementation
while queue Q not empty
dequeue the first vertex u from Q
for each vertex v directly reachable from u
if v is unvisited
enqueue v to Q
mark v as visited
08-07-2006 16
Advantages
• Guarantee shortest paths for
unweighted graphs
• Use queue instead of recursive
functions – Avoiding stack overflow
08-07-2006 17
Flood Fill
• An algorithm that determines the
area connected to a given node in a
multi-dimensional array
• Start BFS/DFS from the given node,
counting the total number of nodes
visited
• Example: Squareland (HKOI 2006)
08-07-2006 18
Graph Modeling
• Conversion of a problem into a graph
problem
• Essential in solving most graph
problems
08-07-2006 19
Basics of graph modeling
• Identify the vertices and the edges
• Identify the objective of the problem
• State the objective in graph terms
• Implementation:
– construct the graph from the input instance
– run the suitable graph algorithms on the graph
– convert the output to the required format
(cx, 2004)
08-07-2006 20
Other Topics in Graph
Theory
• Cut Vertices & Cut Edges
• Euler Path/Circuit & Hamilton
Path/Circuit
• Planarity
08-07-2006 21
Cut Vertices & Cut Edges
• What is a cut vertex?
– A cut vertex is a type of graph vertex,
the removal of which causes an increase
in the number of connected components
• What is a cut edge?
08-07-2006 22
Euler Path & Hamilton Path
• An Euler path is a path in a graph
which visits each edge exactly once
• A Hamilton path is a path in an
undirected graph which visits each
vertex exactly once.
08-07-2006 23
Planarity
• A planar graph is a graph that can be
drawn so that no edges intersect
• K5 and K3,3 are non-planar graphs
08-07-2006 24