Вы находитесь на странице: 1из 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 Adjacency Matrix Representation


graph:
v1 v2 v3 v4

v1 0 1 0 0
v2 0 0 1 0
v3 0 0 0 0
v4 1 0 1 0

Ver. 1.0 Session 17


Data Structures and Algorithms
Adjacency List

Consider the following Adjacency List Representation


graph:

Ver. 1.0 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

There are no unvisited vertices


adjacent to v6
Visited:
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

There are no unvisited vertices


adjacent to v5
Visited:
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

There are no unvisited vertices


adjacent to v4
Visited:
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 1. Repeat step 2 for each


vertex, v in the graph
execute the preceding algorithm
2. If v is not visited:
repeatedly for all unvisited vertices in a. Call DFS(v)
the graph.

Ver. 1.0 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 v3 v6

v1 v2 v4 v3 v6
Ver. 1.0 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 v3 v6 v5

v1 v2 v4 v3 v6 v5
Ver. 1.0 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 v6 v5
Ver. 1.0 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 v6 v5
Ver. 1.0 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 v6 v5
Ver. 1.0 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 v6 v5
Ver. 1.0 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 v6 v5
Ver. 1.0 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 v6 v5
Ver. 1.0 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 1. Repeat step 2 for each


vertex, v in the graph
execute the preceding algorithm
2. If v is not visited:
repeatedly for all unvisited vertices in a. Call BFS(v)
the graph.

Ver. 1.0 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.)

5 Suppose you need to find the


shortest distance of all the
vertices from vertex v1.
3 4 6
Add v1 to the FINAL array.

2
3

6 3

v1 v2 v3 v4 v5 v6
DISTANCE 0 5 3

FINAL v1

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5 In the DISTANCE array, vertex


v4 has the shortest distance
from vertex v1.
3 4 6 Therefore, v4 is added to the
FINAL array.
2
3

6 3

v1 v2 v3 v4 v5 v6
DISTANCE 0 5 3

FINAL v1 v4

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5
v1 v2 = 5
v1 v4 v2 = 3 + =

3 4 6
>5
Therefore, no change is
2
3 made.
6 3

v1 v2 v3 v4 v5 v6
DISTANCE 0 5 3

FINAL v1 v4

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5
v1 v3 =
v1 v4 v3 = 3 + 2 = 5

3 4 6
5<
Therefore, the entry
2
3 corresponding to v3 in the
DISTANCE array is changed
6 3
to 5.

v1 v2 v3 v4 v5 v6
DISTANCE 0 5
5 3

FINAL v1 v4

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5
v1 v5 =
v1 v4 v5 = 3 + 6 = 9

3 4 6
9<
Therefore, the entry
2
3 corresponding to v5 in the
DISTANCE array is changed
6 3
to 9.

v1 v2 v3 v4 v5 v6
DISTANCE 0 5 5 3
9

FINAL v1 v4

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5
v1 v6 =
v1 v4 v6 = 3 + =

3 4 6

Both the values are equal.


2
3 Therefore, no change is made.
6 3
PASS 1 complete

v1 v2 v3 v4 v5 v6
DISTANCE 0 5 5 3 9

FINAL v1 v4

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5
From the DISTANCE array,
select the vertex with the
shortest distance from v1, such
that the selected vertex is not
3 4 6
in the FINAL array.

2
v2 and v3 have the shortest and
3 the same distance from v1.
6 3 Let us select v2 and add it to
the FINAL array.

v1 v2 v3 v4 v5 v6
DISTANCE 0 5 5 3 9

FINAL v1 v4 v2

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5
v1 v3 = 5
v1 v2 v3 = 5 + 4 = 9

3 4 6
9>5
Therefore, no change is
2
3 made.
6 3

v1 v2 v3 v4 v5 v6
DISTANCE 0 5 5 3 9

FINAL v1 v4 v2

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5
v1 v5 = 9
v1 v2 v5 = 5 + =

3 4 6
>9
Therefore, no change is
2
3 made.
6 3

v1 v2 v3 v4 v5 v6
DISTANCE 0 5 5 3 9

FINAL v1 v4 v2

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5
v1 v6 =
v1 v2 v6 = 5 + 6 = 11

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

v1 v2 v3 v4 v5 v6
DISTANCE 0 5 5 3 9
11

FINAL v1 v4 v2

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5
From the DISTANCE array,
select the vertex with the
shortest distance from v1, such
that the selected vertex is not
3 4 6
in the FINAL array.

2 Let us select v3 and add it to


3
the FINAL array.
6 3

v1 v2 v3 v4 v5 v6
DISTANCE 0 5 5 3 9 11

FINAL v1 v4 v2 v3

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5
v1 v5 = 9
v1 v3 v5 = 5 + 3 = 8

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

v1 v2 v3 v4 v5 v6
DISTANCE 0 5 5 3 9
8 11

FINAL v1 v4 v2 v3

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5
v1 v6 = 11
v1 v3 v6 = 5 + 3 = 8

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

v1 v2 v3 v4 v5 v6
DISTANCE 0 5 5 3 8 11
8

FINAL v1 v4 v2 v3

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5
From the DISTANCE array,
select the vertex with the
shortest distance from v1, such
that the selected vertex is not
3 4 6
in the FINAL array.

2 Let us select v5 and add it to


3
the FINAL array.
6 3

v1 v2 v3 v4 v5 v6
DISTANCE 0 5 5 3 8 8

FINAL v1 v4 v2 v3 v5

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5
v1 v6 = 8
v1 v5 v6 = 8 + =

3 4 6
>8
Therefore, no change is
2
3 made.
6 3
Pass 4 complete

v1 v2 v3 v4 v5 v6
DISTANCE 0 5 5 3 8 8

FINAL v1 v4 v2 v3 v5

Ver. 1.0 Session 17


Data Structures and Algorithms
Solving the Shortest Path Problem (Contd.)

5
Now add the only remaining
vertex, v6 to the FINAL
array.
3 4 6 All vertices have been
added to the FINAL array.
2
This means that the
3 DISTANCE array now
6 3
contains the shortest
distances from vertex v1 to
all other vertices.
v1 v2 v3 v4 v5 v6
DISTANCE 0 5 5 3 8 8

FINAL v1 v4 v2 v3 v5 v6

Ver. 1.0 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

Вам также может понравиться