Question

In: Computer Science

Suppose you have an all positive edge-weighted graph G and a start vertex a and asks...

Suppose you have an all positive edge-weighted graph G and a start vertex a and asks you to find the lowest-weight path from a to every vertex in G. Now considering the weight of a path to be the maximum weight of its edges, how can you alter Dijkstra’s algorithm to solve this?

Solutions

Expert Solution

Algorithm
1) Create a set sptSet (shortest path tree set) that keeps track of vertices included in shortest path tree, i.e., whose minimum distance from source is calculated and finalized. Initially, this set is empty.
2) Assign a distance value to all vertices in the input graph. Initialize all distance values as INFINITE. Assign distance value as 0 for the source vertex so that it is picked first.
3) While sptSet doesn’t include all vertices
.a) Pick a vertex u which is not there in sptSet and has minimum distance value.
.b) Include u to sptSet.
.c) Update distance value of all adjacent vertices of u. To update the distance values, iterate through all adjacent vertices. For every adjacent vertex v, if sum of distance value of u (from source) and weight of edge u-v, is less than the distance value of v, then update the distance value of v.
.d) Update the path index of adjacent vertex of v for min distance and then loop through the path

// A Java program for Dijkstra's shortest path algorithm for adjacency matrix.

import java.util.*;
import java.lang.*;
import java.io.*;
  
class ShortestPath {
// A utility function to find the vertex with minimum distance value,
// from the set of vertices not yet included in shortest path tree
static final int V = 9;
int minDistance(int dist[], Boolean sptSet[])
{
// Initialize min value
int min = Integer.MAX_VALUE, min_index = -1;
  
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
void printSolution(int dist[], int path[], int src)
{
for (int i = 0; i < V; i++)
{
// print the distance from dist
System.out.print( "Vertex : " + i + "\t Distance : " + dist[i]);
  
System.out.print(" \t Path : ");
// loop through the path saved for parent vertex till it reaches source
for(int j = i; j != src; j = path[j]){
System.out.print( j + " -> ");
}
System.out.println(src);
}
}
  
// Function that implements Dijkstra's single source shortest path
// algorithm for a graph represented using adjacency matrix
// representation
void dijkstra(int graph[][], int src)
{
int dist[] = new int[V]; // dist[i] will hold the shortest distance from src to i
int path[] = new int[V]; // path[i] will hold the shortest path from src to i
  
// sptSet[i] will true if vertex i is included in shortest path
Boolean sptSet[] = new Boolean[V];
  
// Initialize all distances as INFINITE and stpSet[] as false
for (int i = 0; i < V; i++) {
dist[i] = Integer.MAX_VALUE;
path[i] = i;
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] and path[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] != 0 && dist[u] != Integer.MAX_VALUE && dist[u] + graph[u][v] < dist[v])
{
dist[v] = dist[u] + graph[u][v];
path[v] = u; // save index of adjacent vertex min distance
}
}
  
// print the constructed distance array
printSolution(dist, path, src);
}
  
}
class Main {
// Driver method
public static void main(String[] args)
{
/* Let us create the example graph discussed above */
int graph[][] = new int[][] { { 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 } };
ShortestPath t = new ShortestPath();
t.dijkstra(graph, 0);
}  
}

Output


Related Solutions

Suppose that a graph G is such that each vertex of G has degree at least...
Suppose that a graph G is such that each vertex of G has degree at least 100. Show that G contains a cycle of length at least 101, i.e., a cycle passing through at least 101 vertices.
The neighborhood of a vertex in a graph consists of the vertex itself, together with all...
The neighborhood of a vertex in a graph consists of the vertex itself, together with all vertices that are connected to it by an edge. Each graph has a variable xi associated with the i-th vertex, and the vertex has a known value that is equal to the sum of the variables for all neighborhood vertices. Start with a graph with 5 vertices forming a pentagon, with edges joining vertices 1 and 2, 2 and 3, 3 and 4, 4...
Python 3 question Suppose that a directed and weighted graph represented as vertex-list, how could it...
Python 3 question Suppose that a directed and weighted graph represented as vertex-list, how could it perform uniform cost search by using priority queue?
Suppose G is a connected cubic graph (regular of degree 3) and e is an edge...
Suppose G is a connected cubic graph (regular of degree 3) and e is an edge such that G − e has two connected components G1 and G2 (a) Explain what connected means. (b) We say that e is a____________ of G (c) show that G1 has an odd number of vertices. (d) draw a connected cubic graph G with an edge e as above.
You are given an undirected graph G = ( V, E ) in which the edge...
You are given an undirected graph G = ( V, E ) in which the edge weights are highly restricted. In particular, each edge has a positive integer weight from 1 to W, where W is a constant (independent of the number of edges or vertices). Show that it is possible to compute the single-source shortest paths in such a graph in O(E+V) time.
Python3 question. Suppose I have a undirect and unweighted graph with vertex list type, here is...
Python3 question. Suppose I have a undirect and unweighted graph with vertex list type, here is the code of the graph. graph = { "a" : ["c"], "b" : ["c", "e"], "c" : ["a", "b", "d", "e"], "d" : ["c"], "e" : ["c", "b"], "f" : [] } I want to use this to create a DFS method. How can I use recursion only to finish the work?
Python3 question. Suppose I have a undirect and unweighted graph with vertex list type, here is...
Python3 question. Suppose I have a undirect and unweighted graph with vertex list type, here is the code of the graph. graph = { "a" : ["c"], "b" : ["c", "e"], "c" : ["a", "b", "d", "e"], "d" : ["c"], "e" : ["c", "b"], "f" : [] } I want to use this to create a DFS method. How can I use stack only to finish the work?
Python3 question. Suppose I have a undirect and unweighted graph with vertex list type, here is...
Python3 question. Suppose I have a undirect and unweighted graph with vertex list type, here is the code of the graph. graph = { "a" : ["c"], "b" : ["c", "e"], "c" : ["a", "b", "d", "e"], "d" : ["c"], "e" : ["c", "b"], "f" : [] } I want to use this to create a BFS method. How can I use queue only to finish the work?
Let x be a fixed positive integer. Is it possible to have a graph G with...
Let x be a fixed positive integer. Is it possible to have a graph G with 4x + 1 vertices such that G has a vertex of degree d for all d = 1, 2, ..., 4x + 1? Justify your answer. (Note: The graph G does not need to be simple.)
Given a connected graph G with n vertices. We say an edge of G is a...
Given a connected graph G with n vertices. We say an edge of G is a bridge if the graph becomes a disconnected graph after removing the edge. Give an O(m + n) time algorithm that finds all the bridges. (Partial credits will be given for a polynomial time algorithm.) (Hint: Use DFS)
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT