Floyd Warshall Algorithm
Floyd Warshall Algorithm
ASSIGNMENT NO: -
Write a program in c to find the shortest path of a connected graph using floyd’s algo
THEORY: - The Floyd Warshall Algorithm is for solving the All Pairs Shortest Path problem. The
problem is to find shortest distances between every pair of vertices in a given edge weighted
directed Graph.
Example:
Input:
graph[][] = { {0, 5, INF, 10},
{INF, 0, 3, INF},
{INF, INF, 0, 1},
{INF, INF, INF, 0} }
which represents the following graph
10
(0)------->(3)
| /|\
5| |
| |1
\|/ |
(1)------->(2)
3
Note that the value of graph[i][j] is 0 if i is equal to j
And graph[i][j] is INF (infinite) if there is no edge from vertex i to j.
Output:
Shortest distance matrix
0 5 8 9
INF 0 3 4
INF INF 0 1
INF INF INF 0
ALGORITHM: -
Variable Listing: -
Date: -
Page No.
STEP 5: - Read n
STEP 6: - Display “give the initial weighted graph in matrix form(give 9999 in place of infinity)”
STEP 20: - Display “the final matrix where we can find the shortest distance”
Date: -
Page No.
STEP 7: - End
enter no of vertices 3
give the initial weighted graph in weight matrix form(give 9999 in the place of infinity)
3 1 8
4 9 6
2 5 8
Date: -
Page No.
--------------------------------
Set 2: -
enter no of vertices 4
give the initial weighted graph in weight matrix form(give 9999 in the place of infinity)
Date: -
Page No.
3 6 1 2
9 5 7 8
1 4 5 9
5 1 9 4
--------------------------------
Date: -
Page No.
DISCUSSION: -We initialize the solution matrix same as the input graph matrix as a first step.
Then we update the solution matrix by considering all vertices as an intermediate vertex. The
idea is to one by one pick all vertices and updates all shortest paths which include the picked
vertex as an intermediate vertex in the shortest path. When we pick vertex number k as an
intermediate vertex, we already have considered vertices {0, 1, 2, .. k-1} as intermediate
vertices. For every pair (i, j) of the source and destination vertices respectively, there are two
possible cases.
1) k is not an intermediate vertex in shortest path from i to j. We keep the value of dist[i][j] as it
is.
2) k is an intermediate vertex in shortest path from i to j. We update the value of dist[i][j] as
dist[i][k] + dist[k][j] if dist[i][j] > dist[i][k] + dist[k][j]
3) The above program only prints the shortest distances. We can modify the solution to print the
shortest paths also by storing the predecessor information in a separate 2D matrix.
Also, the value of INF can be taken as INT_MAX from limits.h to make sure that we handle
maximum possible value. When we take INF as INT_MAX, we need to change the if condition in
the above program to avoid arithmetic overflow.
Date: -