Question

In: Computer Science

Describe and analyze an algorithm to determine the number of shortest paths from a source vertex...

Describe and analyze an algorithm to determine the number of shortest paths from a source vertex s to a target vertex t in an arbitrary directed graph G with weighted edges. You may assume that all edge weights are positive and that all necessary arithmetic operations can be performed in O(1) time.

[Hint: Compute shortest path distances from s to every other vertex. Throw away all edges that cannot be part of a shortest path from s to another vertex. What’s left?]

Write a pseudo code algorithm for the situation described above. :)

Solutions

Expert Solution

algorithm:

d.assign(n, INF);

d[s] = 0;

set<pair<int, int>> q;

q.insert({0, s});

while (!q.empty())

{

int v = q.begin()->second;

q.erase(q.begin());

for (auto edge : adj[v])

{

int u = edge.first; int w = edge.second;

if (d[v] + w < d[u])

{

q.erase({d[u], u});

d[u] = d[v] + w;

q.insert({d[u], u});

}

}

}

pseudocode:-

#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[])
{

int min = INT_MAX, min_index; // Initialize min value

for (int v = 0; v < V; v++)

if (sptSet[v] == false && dist[v] <= min)

min = dist[v], min_index = v;

return min_index;

}

void printSolution(int dist[])// A utility function to print the constructed distance array

void printSolution(int dist[])

{

printf("Vertex \t\t Distance from Source\n");

for (int i = 0; i < V; i++)

printf("%d \t\t %d\n", i, dist[i]);

}

// Function 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

bool sptSet[V]; // sptSet[i] will be true if vertex i is included in shortest

// path tree or shortest distance from src to i is finalized

for (int i = 0; i < V; i++)// Initialize all distances as INFINITE and stpSet[] as false

dist[i] = INT_MAX, sptSet[i] = false;

dist[src] = 0;// Distance of source vertex from itself is always 0

for (int count = 0; count < V - 1; count++)// Find shortest path for all vertices

{

int u = minDistance(dist, sptSet);// Pick the minimum distance vertex from the set of vertices not yet processed. u is always equal to src in the first iteration.

sptSet[u] = true;// Mark the picked vertex as processed

// Update dist value of the adjacent vertices of the picked vertex.

for (int v = 0; v < V; v++)

if (!sptSet[v] && graph[u][v] && dist[u] != INT_MAX // 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]

&& dist[u] + graph[u][v] < dist[v])

dist[v] = dist[u] + graph[u][v];

}

// print the constructed distance array

printSolution(dist);

}

// 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;

}


Related Solutions

Use both BFS (starting at vertex A) and Floyd-Warshall to compute shortest paths in the following...
Use both BFS (starting at vertex A) and Floyd-Warshall to compute shortest paths in the following graph: G(V, E) where V = {A, B, C, D, E} E = { {A,B}, {B,C}, {C, A}. {B, D}, {B, E}, {D, E}}
Trace through of Dijkstra’s Algorithm, using vertex v5 as the source vertex. Here is adjacency matrix...
Trace through of Dijkstra’s Algorithm, using vertex v5 as the source vertex. Here is adjacency matrix representing the graph with n = 6 vertices: 1 2 3 4 5 6 1 0 999 5 8 999 4 2 9 0 999 999 12 3 3 999 10 0 2 9 999 4 999 999 999 0 999 999 5 999 7 17 999 0 11 6 5 999 11 16 2 0             Initially we have: vnear = 5. Fill array...
Describe how the Shortest Job First (SJF)Scheduling algorithm works. Explain the differences of working procedure between...
Describe how the Shortest Job First (SJF)Scheduling algorithm works. Explain the differences of working procedure between preemptive and non-preemptive version of this algorithm.
Describe the algorithm to generate random numbers from an arbitrary discrete distribution with finite number of...
Describe the algorithm to generate random numbers from an arbitrary discrete distribution with finite number of outcomes.
Develop an algorithm and implement Optimal Page Replacement algorithm using C++. Determine the number of page...
Develop an algorithm and implement Optimal Page Replacement algorithm using C++. Determine the number of page faults and page hits by considering the Frame size=4, ReferenceString:2 4 6 7 8 2 4 9 13 9 2 7 2 6 1 4 9 2
Use the reflection principle to find the number of paths for a simple random walk from...
Use the reflection principle to find the number of paths for a simple random walk from S0=2 to S15= 5 that do not hit the level at k=6.
For light moving from left to right through a lens, describe the paths of the three...
For light moving from left to right through a lens, describe the paths of the three principal rays used to locate the image formed by the lens. Using the three principal rays, draw two ray diagrams for object sitting in front of (a) concave lens (b)convex lens. Please indicate the focus points clearly on your ray diagrams. Describe the difference between the shapes of converging and diverging lens , as well as the difference between the images formed by converging...
Determine the output of the algorithm below the number of assignment operations in each (show work)...
Determine the output of the algorithm below the number of assignment operations in each (show work) the number of print operations in each (show work) the complexity of each algorithm in terms of Big O notation (show work) 3. Let n be a given positive integer, and let myList be a three-dimensional array with capacity n for each dimension. for each index i from 1 to n do { for each index j from 1 to n/4 do { for...
PYTHON: Describe a recursive algorithm that counts the number of nodes in a singly linked list.
PYTHON: Describe a recursive algorithm that counts the number of nodes in a singly linked list.
Analyze graphically the economics of mobile-source pollution including the deadweight losses from the divergence of marginal...
Analyze graphically the economics of mobile-source pollution including the deadweight losses from the divergence of marginal private costs and marginal social costs due to both implicit subsidies and external costs. no reference
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT