Question

Design and implement Dijkstra’s algorithm to compute all-pair shortest paths in any given graph using

An adjacency matrix using a one-dimensional array for storing only the elements of the lower triangle in the adjacency matrix.[Program in C language]

The input to program must be connected, undirected, and weighted graphs. The programs must be able to find shortest paths on two types of connected, undirected, and weighted graphs: complete graph (a graph with a link between every pair of nodes) and sparse graph (a graph with exactly n-1 links). To prepare graphs as inputs must include these additional programs (functions) as follows:

1. Random. A program to randomly generate a number between 1 and n. You can use a random number generator function in the libraries of your programming language or write your own function.

2. Complete. A program that can create an adjacency matrix for an undirected complete graph with any given size n.

3. Sparse. A program that can create an adjacency matrix for an undirected sparse graph with any given size n. The Sparse program must use the Random program (number 1 in this list) to determine all the links (n-1) in the sparse graph.

4. Weight. To include weights on the links of the undirected complete graphs (generated by the Complete program, number 2 in this list) and on the links of the undirected sparse graphs (generated by the Sparse program, number 3 in this list), use the Random program (number 1 in this list) to generate positive numbers as weights

[Need outputs and graphs also in the solution along with source code]

TEST CASE:

Test case:

adj-test case-1

. . . 29 . . . .

. . . . . 11 11 .

. . . 12 . 5 5 .

29 . 12 . 5 . 13 .

. . . 5 . . 7 11

. 11 5 . . . . 17

. 11 5 13 7 . . .

. . . . 11 17 . .

adj-test case-2

. . . 29 . . . .

. . . . . 11 11 .

. . . 12 . 5 5 .

29 . 12 . 5 . 13 .

. . . 5 . . 7 11

. 11 5 . . . . 17

. 11 5 13 7 . . .

. . . . 11 17 . .



10 15 Shortest path between v2 - v8: The distance is: 35 The path is: v2->v3->v6->v9->v8 13 25 25 17 28 25 14 18 Shortest path between v12-v10: The distance is:? The path is:? 14 12 29 13 16 12

0 0
Add a comment Improve this question Transcribed image text
Answer #1
 
#include <stdio.h>
#include <limits.h>
 
// Number of vertices in the graph
#define V 9
 
// A utility function to find the vertex with minimum distance value, from
// the set of vertices not yet included in shortest path tree
int minDistance(int dist[], bool sptSet[])
{
   // Initialize min value
   int min = INT_MAX, min_index;
 
   for (int v = 0; v < V; v++)
     if (sptSet[v] == false && dist[v] <= min)
         min = dist[v], min_index = v;
 
   return min_index;
}
 
// A utility function to print the constructed distance array
int printSolution(int dist[], int n)
{
   printf("Vertex   Distance from Sourcen");
   for (int i = 0; i < V; i++)
      printf("%d tt %dn", i, dist[i]);
}
 
// Funtion that implements Dijkstra's single source shortest path algorithm
// for a graph represented using adjacency matrix representation
void dijkstra(int graph[V][V], int src)
{
     int dist[V];     // The output array.  dist[i] will hold the shortest
                      // distance from src to i
 
     bool sptSet[V]; // sptSet[i] will true if vertex i is included in shortest
                     // path tree or shortest distance from src to i is finalized
 
     // Initialize all distances as INFINITE and stpSet[] as false
     for (int i = 0; i < V; i++)
        dist[i] = INT_MAX, sptSet[i] = false;
 
     // Distance of source vertex from itself is always 0
     dist[src] = 0;
 
     // Find shortest path for all vertices
     for (int count = 0; count < V-1; count++)
     {
       // Pick the minimum distance vertex from the set of vertices not
       // yet processed. u is always equal to src in first iteration.
       int u = minDistance(dist, sptSet);
 
       // Mark the picked vertex as processed
       sptSet[u] = true;
 
       // Update dist value of the adjacent vertices of the picked vertex.
       for (int v = 0; v < V; v++)
 
         // Update dist[v] only if is not in sptSet, there is an edge from 
         // u to v, and total weight of path from src to  v through u is 
         // smaller than current value of dist[v]
         if (!sptSet[v] && graph[u][v] && dist[u] != INT_MAX 
                                       && dist[u]+graph[u][v] < dist[v])
            dist[v] = dist[u] + graph[u][v];
     }
 
     // print the constructed distance array
     printSolution(dist, V);
}
 
// driver program to test above function
int main()
{
   /* Let us create the example graph discussed above */
   int graph[V][V] = {{0, 4, 0, 0, 0, 0, 0, 8, 0},
                      {4, 0, 8, 0, 0, 0, 0, 11, 0},
                      {0, 8, 0, 7, 0, 4, 0, 0, 2},
                      {0, 0, 7, 0, 9, 14, 0, 0, 0},
                      {0, 0, 0, 9, 0, 10, 0, 0, 0},
                      {0, 0, 4, 14, 10, 0, 2, 0, 0},
                      {0, 0, 0, 0, 0, 2, 0, 1, 6},
                      {8, 11, 0, 0, 0, 0, 1, 0, 7},
                      {0, 0, 2, 0, 0, 0, 6, 7, 0}
                     };
 
    dijkstra(graph, 0);
 
    return 0;
}
Add a comment
Know the answer?
Add Answer to:
Design and implement Dijkstra’s algorithm to compute all-pair shortest paths in any given graph using An...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT