Converted 1c380
Converted 1c380
Anchorage
Boston
Minneapolis
Seattle
Hartford
SF
Austin Atlanta
Computer Network Or Internet
Charter Comcast
Regional Network
Intel UNT
Application
Traveling Saleman
Start
node or vertex
edges (weight)
Graph Definition
A graph G = (V,E) is composed of:
V: set of vertices (nodes)
E: set of edges (arcs) connecting the vertices in
V
An edge e = (u,v) is a pair of vertices
Example: a b V= {a,b,c,d,e}
E= {(a,b),(a,c),
c (a,d),
(b,e),(c,d),(c,e),
(d,e)}
d e
Undirected vs. Directed Graph
e ( d )/ 2
0
i
Hint: Adjacent vertices are
counted twice.
Subgraph
Subgraph:
subset of vertices and edges
Simple Path
A simple path is a path such that all vertices are distinct,
except that the first and the last could be the same.
ABCD is a simple path
A C
path
D
Cycle
A cycle is a path that starts and ends at the same point. For
undirected graph, the edges are distinct.
CBDC is a cycle
A C
D
Connected vs. Unconnected
Graph
0
20 10
1 1
2
4
5
3
Representation Of Graph
Two representations
Adjacency Matrix
Adjacency List
Adjacency Matrix
Assume N nodes in graph
Use Matrix A[0…N-1][0…N-1]
if vertex i and vertex j are adjacent in graph,
A[i][j] = 1,
otherwise A[i][j] = 0
if vertex i has a loop, A[i][i] = 1
if vertex i has no loop, A[i][i] = 0
Example of Adjacency Matrix
A[i][j] 0 1 2 3
0 0 0 1 1 0
1 1 0 1 1
1 2 1 1 0 1
2
3 0 1 1 0
3 0 1 1 0
1 0 1 1
So, Matrix A = 1 1 0 1
0 1 1 0
Undirected vs. Directed
Undirected graph
adjacency matrix is symmetric
A[i][j]=A[j][i]
Directed graph
adjacency matrix may not be symmetric
A[i][j]A[j][i]
Directed Graph
A[i][j] 0 1 2 3
0 0 1 1 1
0
1 0 0 0 1
2 0 0 0 1
1
2 3 0 0 0 0
3 0 1 1 1
0 0 0 1
So, Matrix A = 0 0 0 1
0 0 0 0
Weighted Graph
A[i][j] 0 1 2 3
0 0 20 10 1
1 20 0 0 5
0 2 10 0 0 4
20 10
3 1 5 4 0
1 1
2
4 0 20 10 1
5 20 0 0 5
3
So, Matrix A = 10 0 0 4
1 5 4 0
Adjacency List
An array of list
the ith element of the array is a list of vertices that
connect to vertex i
0 1 2 3
0
1 3
1 2 3
2
3
3
vertex 0 connect to vertex 1, 2 and 3
vertex 1 connects to 3
vertex 2 connects to 3
Weighted Graph
Weighted graph: extend each node with an
addition field: weight
0 0 1 10 2 20 3 1
20 10
1 0 10 3 4
1 1
2 2 0 20 3 5
4
5 3 0 1 1 4 2 5
3
Comparison Of Representations
Adjacency Adjacency
Cost
Matrix List
Given two vertices u and v: degree of
find out whether u and v are O(1) node
adjacent O(N)
degree of
Given a vertex u:
O(N) node
enumerate all neighbors of u
O(N)
Summations
For all vertices:
of all node
enumerate all neighbors of each O(N2) degree
vertex
O(E)
Complete Graph
• There is an edge between any two vertices
Hartford
SF
NYC
LA
DC
Graph Traversal
From vertex u, list out all vertices that can
be reached in graph G
Set of nodes to expand
Each node has a flag to indicate visited or
not
Traversal Algorithm
Step 1: { Hartford }
findneighbors of Hartford
{ Hartford, NYC, CHI }
CHI
SF Hartford
NYC
LA
W. DC
Traversal Algorithm
Step 2: { Hartford, NYC, CHI }
findneighbors of NYC, CHI
{ Hartford, NYC, CHI, LA, SF }
CHI
SF Hartford
NYC
LA
W. DC
Traversal Algorithm
Step 3: {Hartford, NYC, CHI, LA, SF }
findneighbors of LA, SF
no other new neighbors
CHI
SF Hartford
NYC
LA
W. DC
Traversal Algorithm
Finally we get all cities that United
Airline can reach from Hartford Airport
{Hartford, NYC, CHI, LA, SF }
CHI
SF Hartford
NYC
LA
W. DC
Algorithm of Graph Traversal
1. Mark all nodes as unvisited
2. Pick a starting vertex u, add u to probing list
3. While ( probing list is not empty)
{
Remove a node v from probing list
Mark node v as visited
For each neighbor w of v, if w is unvisited,
add w to the probing list
}
Graph Traversal Algorithms
Two algorithms
Depth First Traversal
Breadth First Traversal
Depth First Traversal
Probing List is implemented as stack (LIFO)
Example
A’s neighbor: B, C, E A
B’s neighbor: A, C, F
C’s neighbor: A, B, D B
C E
D’s neighbor: E, C, F
E’s neighbor: A, D D
F
F’s neighbor: B, D
start from vertex A
Depth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Initial State
Visited Vertices { }
Probing Vertices { A }
Unvisited Vertices { A, B, C, D, E, F }
stack A
Depth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Peek a vertex from stack, it is A, mark it
as visited
Find A’s first unvisited neighbor, push it
into stack
Visited Vertices { A }
Probing vertices { A, B } B
Unvisited Vertices { B, C, D, E, F } A A
stack
Depth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Peek a vertex from stack, it is B, mark it
as visited
Find B’s first unvisited neighbor, push it
in stack
Visited Vertices { A, B } C
Probing Vertices { A, B, C } B B
Unvisited Vertices { C, D, E, F } A A
stack
Depth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Peek a vertex from stack, it is C, mark it
as visited
Find C’s first unvisited neighbor, push it in
stack D
Visited Vertices { A, B, C } C C
Probing Vertices { A, B, C, D } B B
Unvisited Vertices { D, E, F } A A
stack
Depth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Peek a vertex from stack, it is D, mark it
as visited
Find D’s first unvisited neighbor, push it E
in stack D D
Visited Vertices { A, B, C, D } C C
Probing Vertices { A, B, C, D, E } B B
Unvisited Vertices { E, F } A A
stack
Depth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Peek a vertex from stack, it is E, mark it
as visited
Find E’s first unvisited neighbor, no E
vertex found, Pop E D D
Visited Vertices { A, B, C, D, E } C C
Probing Vertices { A, B, C, D } B B
Unvisited Vertices { F } A A
stack
Depth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Peek a vertex from stack, it is D, mark it
as visited
Find D’s first unvisited neighbor, push it F
in stack D D
Visited Vertices { A, B, C, D, E } C C
Probing Vertices { A, B, C, D, F} B B
Unvisited Vertices { F } A A
stack
Depth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Peek a vertex from stack, it is F, mark it
as visited
Find F’s first unvisited neighbor, no F
vertex found, Pop F D D
Visited Vertices { A, B, C, D, E, F } C C
Probing Vertices { A, B, C, D} B B
Unvisited Vertices { } A A
stack
Depth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Peek a vertex from stack, it is D, mark it
as visited
Find D’s first unvisited neighbor, no
vertex found, Pop D D
Visited Vertices { A, B, C, D, E, F } C C
Probing Vertices { A, B, C } B B
Unvisited Vertices { } A A
stack
Depth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Peek a vertex from stack, it is C, mark it
as visited
Find C’s first unvisited neighbor, no
vertex found, Pop C
Visited Vertices { A, B, C, D, E, F } C
Probing Vertices { A, B } B B
Unvisited Vertices { } A A
stack
Depth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Peek a vertex from stack, it is B, mark it
as visited
Find B’s first unvisited neighbor, no
vertex found, Pop B
Visited Vertices { A, B, C, D, E, F }
Probing Vertices { A } B
Unvisited Vertices { } A A
stack
Depth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Peek a vertex from stack, it is A, mark it
as visited
Find A’s first unvisited neighbor, no
vertex found, Pop A
Visited Vertices { A, B, C, D, E, F }
Probing Vertices { }
Unvisited Vertices { } A
stack
Depth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Now probing list is empty
End of Depth First Traversal
Visited Vertices { A, B, C, D, E, F }
Probing Vertices { }
Unvisited Vertices { }
stack
Breadth First Traversal
Probing List is implemented as queue (FIFO)
Example
A’s neighbor: B C E A
B’s neighbor: A C F
C’s neighbor: A B D
B E
D’s neighbor: E C F
C
E’s neighbor: A D
F D
F’s neighbor: B D
start from vertex A
Breadth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Initial State
Visited Vertices { }
Probing Vertices { A } A
Unvisited Vertices { A, B, C, D, E, F } queue
Breadth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Delete first vertex from queue, it is A, mark
it as visited
Find A’s all unvisited neighbors, mark them
as visited, put them into queue A
Visited Vertices { A, B, C, E }
Probing Vertices { B, C, E }
B C E
Unvisited Vertices { D, F }
queue
Breadth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Delete first vertex from queue, it is B, mark
it as visited
Find B’s all unvisited neighbors, mark them
as visited, put them into queue B C E
Visited Vertices { A, B, C, E, F }
Probing Vertices { C, E, F }
C E F
Unvisited Vertices { D }
queue
Breadth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Delete first vertex from queue, it is C, mark
it as visited
Find C’s all unvisited neighbors, mark them
as visited, put them into queue C E F
Visited Vertices { A, B, C, E, F, D }
Probing Vertices { E, F, D }
E F D
Unvisited Vertices { }
queue
Breadth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Delete first vertex from queue, it is E, mark
it as visited
Find E’s all unvisited neighbors, no vertex
found E F D
Visited Vertices { A, B, C, E, F, D }
Probing Vertices { F, D }
F D
Unvisited Vertices { }
queue
Breadth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Delete first vertex from queue, it is F, mark it
as visited
Find F’s all unvisited neighbors, no vertex
found F D
Visited Vertices { A, B, C, E, F, D }
Probing Vertices { D }
D
Unvisited Vertices { }
queue
Breadth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Delete first vertex from queue, it is D, mark
it as visited
Find D’s all unvisited neighbors, no vertex
found D
Visited Vertices { A, B, C, E, F, D }
Probing Vertices { }
Unvisited Vertices { }
queue
Breadth First Traversal (Cont)
– A’s neighbor: B C E
– B’s neighbor: A C F
A
– C’s neighbor: A B D
– D’s neighbor: E C F B
– C E
E’s neighbor: A D
– F’s neighbor: B D
F D
Now the queue is empty
End of Breadth First Traversal
VisitedVertices { A, B, C, E, F, D }
Probing Vertices { }
Unvisited Vertices { }
queue
Difference Between DFT & BFT
Depth First Traversal (DFT)
order of visited: A, B, C, D, E, F A
B E
C
Breadth First Traversal (BFT)
order F D
of visited: A, B, C, E, F, D