Sie sind auf Seite 1von 56

Data Structures and Algorithms

Objectives
In this session, you will learn to:
Implement a graph
Apply graphs to solve programming problems

Ver. 1.0

Session 17

Data Structures and Algorithms


Representing a Graph
To implement a graph, you need to first represent the given
information in the form of a graph.
The two most commonly used ways of representing a graph
are as follows:
Adjacency Matrix
Adjacency List

Ver. 1.0

Session 17

Data Structures and Algorithms


Adjacency Matrix
Consider the following
graph:

Adjacency Matrix Representation

v1
v2
v3
v4

Ver. 1.0

v1

v2

v3

v4

0
0
0
1

1
0
0
0

0
1
0
1

0
0
0
0

Session 17

Data Structures and Algorithms


Adjacency List
Consider the following
graph:

Ver. 1.0

Adjacency List Representation

Session 17

Data Structures and Algorithms


Traversing a Graph
Traversing a graph means visiting all the vertices in a graph.
You can traverse a graph with the help of the following two
methods:
Depth First Search (DFS)
Breadth First Search (BFS)

Ver. 1.0

Session 17

Data Structures and Algorithms


DFS
Algorithm: DFS(v)
1. Push the starting vertex, v into the stack.
2. Repeat until the stack becomes empty:
a. Pop a vertex from the stack.
b. Visit the popped vertex.
c. Push all the unvisited vertices adjacent to the popped vertex
into the stack.

Ver. 1.0

Session 17

Data Structures and Algorithms


DFS (Contd.)
Push the starting vertex, v1 into the stack

v1

Ver. 1.0

Session 17

Data Structures and Algorithms


DFS (Contd.)
Pop a vertex, v1 from the stack
Visit v1
Push all unvisited vertices adjacent to v1 into the stack

v1

Visited:
v1
Ver. 1.0

Session 17

Data Structures and Algorithms


DFS (Contd.)
Pop a vertex, v1 from the stack
Visit v1
Push all unvisited vertices adjacent to v1 into the stack

v2
v4

Visited:
v1
Ver. 1.0

Session 17

Data Structures and Algorithms


DFS (Contd.)
Pop a vertex, v2 from the stack
Visit v2
Push all unvisited vertices adjacent to v2 into the stack

v2
v4

Visited:
v1 v2
Ver. 1.0

Session 17

Data Structures and Algorithms


DFS (Contd.)
Pop a vertex, v2 from the stack
Visit v2
Push all unvisited vertices adjacent to v2 into the stack

v6
v3
v4

Visited:
v1 v2
Ver. 1.0

Session 17

Data Structures and Algorithms


DFS (Contd.)
Pop a vertex, v6 from the stack
Visit v6
Push all unvisited vertices adjacent to v6 into the stack

v6
v3
v4

Visited:

There are no unvisited vertices


adjacent to v6

v1 v2 v6
Ver. 1.0

Session 17

Data Structures and Algorithms


DFS (Contd.)
Pop a vertex, v3 from the stack
Visit v3
Push all unvisited vertices adjacent to v3 into the stack

v3
v4

Visited:
v1 v2 v6 v3
Ver. 1.0

Session 17

Data Structures and Algorithms


DFS (Contd.)
Pop a vertex, v3 from the stack
Visit v3
Push all unvisited vertices adjacent to v3 into the stack

v5
v4

Visited:
v1 v2 v6 v3
Ver. 1.0

Session 17

Data Structures and Algorithms


DFS (Contd.)
Pop a vertex, v5 from the stack
Visit v5
Push all unvisited vertices adjacent to v5 into the stack

v5
v4

Visited:

There are no unvisited vertices


adjacent to v5

v1 v2 v6 v3 v5
Ver. 1.0

Session 17

Data Structures and Algorithms


DFS (Contd.)
Pop a vertex, v4 from the stack
Visit v4
Push all unvisited vertices adjacent to v4 into the stack

v4

Visited:

There are no unvisited vertices


adjacent to v4

v1 v2 v6 v3 v5 v4
Ver. 1.0

Session 17

Data Structures and Algorithms


DFS (Contd.)
The stack is now empty
Therefore, traversal is complete

Visited:
v1 v2 v6 v3 v5 v4
Ver. 1.0

Session 17

Data Structures and Algorithms


DFS (Contd.)
Although the preceding algorithm provides a simple and
convenient method to traverse a graph, the algorithm will
not work correctly if the graph is not connected.
In such a case, you will not be able to traverse all the
vertices from one single starting vertex.

Ver. 1.0

Session 17

Data Structures and Algorithms


DFS (Contd.)
To solve this problem, you need to
execute the preceding algorithm
repeatedly for all unvisited vertices in
the graph.

Ver. 1.0

1. Repeat step 2 for each


vertex, v in the graph
2. If v is not visited:
a. Call DFS(v)

Session 17

Data Structures and Algorithms


BFS
Algorithm: BFS(v)
1. Visit the starting vertex, v and insert it into a queue.
2. Repeat step 3 until the queue becomes empty.
3. Delete the front vertex from the queue, visit all its unvisited
adjacent vertices, and insert them into the queue.

Ver. 1.0

Session 17

Data Structures and Algorithms


BFS (Contd.)
Visit v1
Insert v1 into the queue

v1

v1
Ver. 1.0

Session 17

Data Structures and Algorithms


BFS (Contd.)
Remove a vertex v1 from the queue
Visit all unvisited vertices adjacent to v1 and insert them in
the queue

v1

Visited:
v1
Ver. 1.0

Session 17

Data Structures and Algorithms


BFS (Contd.)
Remove a vertex v1 from the queue
Visit all unvisited vertices adjacent to v1 and insert them in
the queue

v2

v4

v1 v2 v4
Ver. 1.0

Session 17

Data Structures and Algorithms


BFS (Contd.)
Remove a vertex v2 from the queue
Visit all unvisited vertices adjacent to v2 and insert them in
the queue

v2

v4

v1 v2 v4
Ver. 1.0

Session 17

Data Structures and Algorithms


BFS (Contd.)
Remove a vertex v2 from the queue
Visit all unvisited vertices adjacent to v2 and insert them in
the queue

v4

v1 v2 v4 v3
Ver. 1.0

v3

v6

v6
Session 17

Data Structures and Algorithms


BFS (Contd.)
Remove a vertex v4 from the queue
Visit all unvisited vertices adjacent to v4 and insert them in
the queue

v4

v1 v2 v4 v3
Ver. 1.0

v3

v6

v5

v6 v5
Session 17

Data Structures and Algorithms


BFS (Contd.)
Remove a vertex v3 from the queue
Visit all unvisited vertices adjacent to v3 and insert them in
the queue

v3

v6

v5

v3 does not have any


unvisited adjacent vertices

v1 v2 v4 v3
Ver. 1.0

v6 v5
Session 17

Data Structures and Algorithms


BFS (Contd.)
Remove a vertex v6 from the queue
Visit all unvisited vertices adjacent to v6 and insert them in
the queue

v6

v5

v3 does not have any


unvisited adjacent vertices

v1 v2 v4 v3
Ver. 1.0

v6 v5
Session 17

Data Structures and Algorithms


BFS (Contd.)
Remove a vertex v6 from the queue
Visit all unvisited vertices adjacent to v6 and insert them in
the queue

v5

v6 does not have any


unvisited adjacent vertices

v1 v2 v4 v3
Ver. 1.0

v6 v5
Session 17

Data Structures and Algorithms


BFS (Contd.)
Remove a vertex v5 from the queue
Visit all unvisited vertices adjacent to v5 and insert them in
the queue

v5

v6 does not have any


unvisited adjacent vertices

v1 v2 v4 v3
Ver. 1.0

v6 v5
Session 17

Data Structures and Algorithms


BFS (Contd.)
Remove a vertex v5 from the queue
Visit all unvisited vertices adjacent to v5 and insert them in
the queue

v5 does not have any


unvisited adjacent vertices

v1 v2 v4 v3
Ver. 1.0

v6 v5
Session 17

Data Structures and Algorithms


BFS (Contd.)
The queue is now empty
Therefore, traversal is complete

v5 does not have any


unvisited adjacent vertices

v1 v2 v4 v3
Ver. 1.0

v6 v5
Session 17

Data Structures and Algorithms


BFS (Contd.)
Although the preceding algorithm provides a simple and
convenient method to traverse a graph, the algorithm will
not work correctly if the graph is not connected.
In such a case, you will not be able to traverse all the
vertices from one single starting vertex.

Ver. 1.0

Session 17

Data Structures and Algorithms


BFS (Contd.)
To solve this problem, you need to
execute the preceding algorithm
repeatedly for all unvisited vertices in
the graph.

Ver. 1.0

1. Repeat step 2 for each


vertex, v in the graph
2. If v is not visited:
a. Call BFS(v)

Session 17

Data Structures and Algorithms


Activity: Implementing a Graph by Using Adjacency Matrix
Representation

Problem Statement:
You have to represent a set of cities and the distances
between them in the form of a graph. Write a program to
represent the graph in the form of an adjacency matrix.

Ver. 1.0

Session 17

Data Structures and Algorithms


Applications of Graphs
Many problems can be easily solved by reducing them in
the form of a graph
Graph theory has been instrumental in analyzing and
solving problems in areas as diverse as computer network
design, urban planning, finding shortest paths and
molecular biology.

Ver. 1.0

Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem
The shortest path problem can be solved by applying the
Dijkstras algorithm on a graph
The Dijkstras algorithm is based on the greedy approach
The steps in the Dijkstras algorithm are as follows:
1. Choose vertex v corresponding to the smallest distance
recorded in the DISTANCE array such that v is not already in
FINAL.
2. Add v to FINAL.
3. Repeat for each vertex w in the graph that is not in FINAL:
a. If the path from v1 to w via v is shorter than the previously
recorded distance from v1 to w (If ((DISTANCE[v] + weight of
edge(v,w)) < DISTANCE[w])):
i. Set DISTANCE[w]=DISTANCE[v] + weight of edge(v,w).

4. If FINAL does not contain all the vertices, go to step 1.


Ver. 1.0

Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
Suppose you need to find the
shortest distance of all the
vertices from vertex v1.

2
6

Ver. 1.0

Add v1 to the FINAL array.

3
3

DISTANCE

v1
0

FINAL

v1

v2

v3

v4 v5
3

v6

Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
In the DISTANCE array, vertex
v4 has the shortest distance
from vertex v1.

2
6

Ver. 1.0

Therefore, v4 is added to the


FINAL array.

3
3

v2

v3

DISTANCE

v1
0

FINAL

v1

v4

v4 v5
3

v6

Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
v1 v2 = 5

v1 v4 v2 = 3 + =
3

2
6

Ver. 1.0

>5
Therefore, no change is
made.

3
3

v2

v3

DISTANCE

v1
0

FINAL

v1

v4

v4 v5
3

v6

Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
v1 v3 =

v1 v4 v3 = 3 + 2 = 5
3

2
6

Ver. 1.0

5<
Therefore, the entry
corresponding to v3 in the
DISTANCE array is changed
to 5.

3
3

v2

v3

DISTANCE

v1
0

FINAL

v1

v4

v4 v5
3

v6

Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
v1 v5 =

v1 v4 v5 = 3 + 6 = 9
3

2
6

Ver. 1.0

9<
Therefore, the entry
corresponding to v5 in the
DISTANCE array is changed
to 9.

3
3

v2

v3

DISTANCE

v1
0

FINAL

v1

v4

v4 v5
3

v6

Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
v1 v6 =

v1 v4 v6 = 3 + =
3

2
6

Ver. 1.0

Both the values are equal.


Therefore, no change is made.

3
3

PASS 1 complete
v2

v3

DISTANCE

v1
0

FINAL

v1

v4

v4 v5
3
9

v6

Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
From the DISTANCE array,
select the vertex with the
shortest distance from v1, such
that the selected vertex is not
in the FINAL array.

2
6

Ver. 1.0

v2 and v3 have the shortest


and the same distance from v1.

Let us select v2 and add it to


the FINAL array.

v2

v3

DISTANCE

v1
0

FINAL

v1

v4

v2

v4 v5
3
9

v6

Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
v1 v3 = 5

v1 v2 v3 = 5 + 4 = 9
3

2
6

Ver. 1.0

9>5
Therefore, no change is
made.

3
3

v2

v3

DISTANCE

v1
0

FINAL

v1

v4

v2

v4 v5
3
9

v6

Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
v1 v5 = 9

v1 v2 v5 = 5 + =
3

2
6

Ver. 1.0

>9
Therefore, no change is
made.

3
3

v2

v3

DISTANCE

v1
0

FINAL

v1

v4

v2

v4 v5
3
9

v6

Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
v1 v6 =

v1 v2 v6 = 5 + 6 = 11
3

2
6

Ver. 1.0

11 <
Therefore, the entry
corresponding to v6 in the
DISTANCE array is changed
to 11.
Pass 2 complete

3
3

v2

v3

DISTANCE

v1
0

FINAL

v1

v4

v2

v4 v5 v6
3
9

11

Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
From the DISTANCE array,
select the vertex with the
shortest distance from v1, such
that the selected vertex is not
in the FINAL array.

2
6

Ver. 1.0

Let us select v3 and add it to


the FINAL array.

3
3

v2

v3

DISTANCE

v1
0

v4 v5 v6
3
9
11

FINAL

v1

v4

v2

v3
Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
v1 v5 = 9

v1 v3 v5 = 5 + 3 = 8
3

2
6

Ver. 1.0

8<9
Therefore, the entry
corresponding to v5 in the
DISTANCE array is changed
to 8.

3
3

v2

v3

DISTANCE

v1
0

v4 v5 v6
3
9
8
11

FINAL

v1

v4

v2

v3
Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
v1 v6 = 11

v1 v3 v6 = 5 + 3 = 8
3

2
6

Ver. 1.0

8 < 11
Therefore, the entry
corresponding to v6 in the
DISTANCE array is changed
to 8.
Pass 3 complete

3
3

v2

v3

DISTANCE

v1
0

v4 v5 v6
3
8
11
8

FINAL

v1

v4

v2

v3
Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
From the DISTANCE array,
select the vertex with the
shortest distance from v1, such
that the selected vertex is not
in the FINAL array.

2
6

Ver. 1.0

Let us select v5 and add it to


the FINAL array.

3
3

v2

v3

DISTANCE

v1
0

v4 v5
3
8

FINAL

v1

v4

v2

v3

v6
8

v5
Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
v1 v6 = 8

v1 v5 v6 = 8 + =
3

2
6

>8
Therefore, no change is
made.

3
3

Pass 4 complete

Ver. 1.0

v2

v3

DISTANCE

v1
0

v4 v5
3
8

FINAL

v1

v4

v2

v3

v6
8

v5
Session 17

Data Structures and Algorithms


Solving the Shortest Path Problem (Contd.)
Now add the only remaining
vertex, v6 to the FINAL
array.
All vertices have been
added to the FINAL array.

2
6

Ver. 1.0

This means that the


DISTANCE array now
contains the shortest
distances from vertex v1 to
all other vertices.

3
3

v2

v3

DISTANCE

v1
0

v4 v5
3
8

FINAL

v1

v4

v2

v3

v5

v6
8
v6
Session 17

Data Structures and Algorithms


Activity: Solving the Shortest Path Problem
Problem Statement:
In the previous activity, you created a program to represent a
set of cities and the distances between them in the form of a
graph. Extend the program to include the functionality for
finding the shortest path from a given city to all the other cities.

Ver. 1.0

Session 17

Data Structures and Algorithms


Summary
In this session, you learned that:
The two most commonly used ways of representing a graph
are as follows:
Adjacency matrix
Adjacency list

Traversing a graph means visiting all the vertices in the graph.


In a graph, there is no special vertex designated as the starting
vertex. Therefore, traversal of the graph may start from any
vertex.
You can traverse a graph with the help of the following two
methods:
DFS
BFS

Ver. 1.0

Session 17

Data Structures and Algorithms


Summary (Contd.)
Graph theory has been instrumental in analyzing and solving
problems in areas as diverse as computer network design,
urban planning, finding shortest paths and molecular biology.

Ver. 1.0

Session 17

Das könnte Ihnen auch gefallen