Database System Concepts
Database System Concepts
7th Edition
ISBN: 9780078022159
Author: Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher: McGraw-Hill Education
Bartleby Related Questions Icon

Related questions

Question

Floyd warshall algorithm java program. Find the shortest paths between all vertices in a graph using dynamic programming. The matrix and number of vertices as the input(using the scanner), and the shortest path matrix as the output.

[画像:**NEIU - Shortest Paths** Find the shortest paths between all vertices in a graph. **Input Format** - First line is `n`, the number of vertices. - The next `n` lines each contain `n` values - the weights of all edges. **Constraints** - `n` will be between 4 and 30 inclusive. - The cost of any edge will be less than 100. - If an edge has a cost of 10,000, that means no edge exists (infinite cost). - An edge will have a cost of 0 if it joins the same vertex, i.e. V1 -> V1. **Output Format** Output the `n x n` cost matrix containing the smallest costs between vertices. - If no edge exists, write INF to represent infinite cost. - Following the cost matrix, output all the paths between all vertices. **Sample Input 0** ``` 5 0 10000 15 10000 10000 24 0 12 1000 19 10000 31 0 14 73 10000 10000 10000 0 55 20 9 23 10000 0 ``` **Sample Output 0** ``` 0 46 15 29 65 24 0 12 26 19 55 31 0 14 50 75 64 76 0 55 20 9 21 35 0 V1 V1 V1 V3 V2 V1 V3 V1 V3 V4 V1 V3 V2 V5 V2 V3 V2 V2 V2 V3 V2 V4 V2 V5 V3 V2 V3 V2 V3 V3 V3 V3 V4 V3 V2 V5 V4 V2 V4 V2 V3 V4 V4 V4 V5 V5 V2 V5 V2 V3 V5 V3 V5 V5 ``` **Explanation 0** - First 5 rows make up the cost matrix. Each row has 5 values separated by spaces. - Note there are no edges from V2 to V2, or from V4 to V3, etc. - The output shows the minimum cost matrix]
expand button
Transcribed Image Text:**NEIU - Shortest Paths** Find the shortest paths between all vertices in a graph. **Input Format** - First line is `n`, the number of vertices. - The next `n` lines each contain `n` values - the weights of all edges. **Constraints** - `n` will be between 4 and 30 inclusive. - The cost of any edge will be less than 100. - If an edge has a cost of 10,000, that means no edge exists (infinite cost). - An edge will have a cost of 0 if it joins the same vertex, i.e. V1 -> V1. **Output Format** Output the `n x n` cost matrix containing the smallest costs between vertices. - If no edge exists, write INF to represent infinite cost. - Following the cost matrix, output all the paths between all vertices. **Sample Input 0** ``` 5 0 10000 15 10000 10000 24 0 12 1000 19 10000 31 0 14 73 10000 10000 10000 0 55 20 9 23 10000 0 ``` **Sample Output 0** ``` 0 46 15 29 65 24 0 12 26 19 55 31 0 14 50 75 64 76 0 55 20 9 21 35 0 V1 V1 V1 V3 V2 V1 V3 V1 V3 V4 V1 V3 V2 V5 V2 V3 V2 V2 V2 V3 V2 V4 V2 V5 V3 V2 V3 V2 V3 V3 V3 V3 V4 V3 V2 V5 V4 V2 V4 V2 V3 V4 V4 V4 V5 V5 V2 V5 V2 V3 V5 V3 V5 V5 ``` **Explanation 0** - First 5 rows make up the cost matrix. Each row has 5 values separated by spaces. - Note there are no edges from V2 to V2, or from V4 to V3, etc. - The output shows the minimum cost matrix
Expert Solution
Check Mark
Still need help?
Follow-up Questions
Read through expert solutions to related follow-up questions below.
Follow-up Question

I have modified the code above. The input to test the method floydWarshal(graph,v) will come from the user (from the console through the scanner). v can not be a final variable because the user will determine the value of v. The double array graph will also be determined and input by the user (from the console through the scanner). I'm having issues getting the input from the user and putting it into the double array. I'm also having issues printing the result of the method, which should be the shortest path graph. Please help

------------------------------------------------------------------------------------

HERE IS THE CODE THAT I HAVE SO FAR

import java.io.*;
import java.util.*;
import java.lang.*;

public class Solution
{

final static int INF = 99999;

public static void shortWarshall(int graph[][],int v)
{
int dist[][] = new int[v][v];
int i, j, k;

/* Initialize the solution matrix
same as input graph matrix.
Or we can say the initial values
of shortest distances
are based on shortest paths
considering no intermediate
vertex. */
for (i = 0; i < v; i++)
for (j = 0; j < v; j++)
dist[i][j] = graph[i][j];

/* Add all vertices one by one
to the set of intermediate
vertices.
---> Before start of an iteration,
we have shortest
distances between all pairs
of vertices such that
the shortest distances consider
only the vertices in
set {0, 1, 2, .. k-1} as
intermediate vertices.
----> After the end of an iteration,
vertex no. k is added
to the set of intermediate
vertices and the set
becomes {0, 1, 2, .. k} */
for (k = 0; k < v; k++) {
// Pick all vertices as source one by one
for (i = 0; i < v; i++) {
// Pick all vertices as destination for the
// above picked source
for (j = 0; j < v; j++) {
// If vertex k is on the shortest path
// from i to j, then update the value of
// dist[i][j]
if (dist[i][k] + dist[k][j]
< dist[i][j])
dist[i][j]
= dist[i][k] + dist[k][j];
}
}
}

// Print the shortest distance matrix
// printSolution(dist);
for (int l = 0; l < v; ++l)
{
for (int m = 0; m < v; ++m)
{
if (dist[l][m] == INF)
System.out.print("INF ");
else
System.out.print(dist[l][m] + " ");
}
System.out.println();
}
}

/*public static void printSolution(int dist[][], int v)
{
for (int i = 0; i < v; ++i)
{
for (int j = 0; j < v; ++j)
{
if (dist[i][j] == INF)
System.out.print("INF ");
else
System.out.print(dist[i][j] + " ");
}
System.out.println();
}
}*/

public static void main(String[] args)
{
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
// Driver's code

/* Let us create the following weighted graph
10
(0)------->(3)
| /|\
5 | |
| | 1
\|/ |
(1)------->(2)
3 */
Scanner scn = new Scanner(System.in);
int v = scn.nextInt();
int c = scn.nextInt();
int r = scn.nextInt();

int graph[][] = new int [c][r];
for(int i=0;i<c;i++)
{
for(int k=0;k<r;k++)
{
graph[i][k]=scn.nextInt();
}
}

// Function call
shortWarshall(graph,v);
}
}

------------------------------------------------------------------

I have also attached the error that I'm getting as a picture

Runtime Error

Error (stderr)

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Solution.shortWarshall(Solution.java:24) at Solution.main(Solution.java:119

Transcribed Image Text:Your code did not pass this test case. Input (stdin) 5 O 24 10000 10000 20 10000 15 12 0 10000 23 O 31 10000 9 Your Output (stdout) Expected Output 10000 10000 no response on stdout ~ 0 46 15 29 65 24 0 12 26 19 55 31 0 14 50 75 64 76 0 55 20 9 21 35 0 V1 V1 V1 V3 V2 V1 V3 V1 V3 V4 14 O 10000 10000 19 73 55 0
Solution
Bartleby Expert
by Bartleby Expert
SEE SOLUTION
Follow-up Questions
Read through expert solutions to related follow-up questions below.
Follow-up Question

I have modified the code above. The input to test the method floydWarshal(graph,v) will come from the user (from the console through the scanner). v can not be a final variable because the user will determine the value of v. The double array graph will also be determined and input by the user (from the console through the scanner). I'm having issues getting the input from the user and putting it into the double array. I'm also having issues printing the result of the method, which should be the shortest path graph. Please help

------------------------------------------------------------------------------------

HERE IS THE CODE THAT I HAVE SO FAR

import java.io.*;
import java.util.*;
import java.lang.*;

public class Solution
{

final static int INF = 99999;

public static void shortWarshall(int graph[][],int v)
{
int dist[][] = new int[v][v];
int i, j, k;

/* Initialize the solution matrix
same as input graph matrix.
Or we can say the initial values
of shortest distances
are based on shortest paths
considering no intermediate
vertex. */
for (i = 0; i < v; i++)
for (j = 0; j < v; j++)
dist[i][j] = graph[i][j];

/* Add all vertices one by one
to the set of intermediate
vertices.
---> Before start of an iteration,
we have shortest
distances between all pairs
of vertices such that
the shortest distances consider
only the vertices in
set {0, 1, 2, .. k-1} as
intermediate vertices.
----> After the end of an iteration,
vertex no. k is added
to the set of intermediate
vertices and the set
becomes {0, 1, 2, .. k} */
for (k = 0; k < v; k++) {
// Pick all vertices as source one by one
for (i = 0; i < v; i++) {
// Pick all vertices as destination for the
// above picked source
for (j = 0; j < v; j++) {
// If vertex k is on the shortest path
// from i to j, then update the value of
// dist[i][j]
if (dist[i][k] + dist[k][j]
< dist[i][j])
dist[i][j]
= dist[i][k] + dist[k][j];
}
}
}

// Print the shortest distance matrix
// printSolution(dist);
for (int l = 0; l < v; ++l)
{
for (int m = 0; m < v; ++m)
{
if (dist[l][m] == INF)
System.out.print("INF ");
else
System.out.print(dist[l][m] + " ");
}
System.out.println();
}
}

/*public static void printSolution(int dist[][], int v)
{
for (int i = 0; i < v; ++i)
{
for (int j = 0; j < v; ++j)
{
if (dist[i][j] == INF)
System.out.print("INF ");
else
System.out.print(dist[i][j] + " ");
}
System.out.println();
}
}*/

public static void main(String[] args)
{
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
// Driver's code

/* Let us create the following weighted graph
10
(0)------->(3)
| /|\
5 | |
| | 1
\|/ |
(1)------->(2)
3 */
Scanner scn = new Scanner(System.in);
int v = scn.nextInt();
int c = scn.nextInt();
int r = scn.nextInt();

int graph[][] = new int [c][r];
for(int i=0;i<c;i++)
{
for(int k=0;k<r;k++)
{
graph[i][k]=scn.nextInt();
}
}

// Function call
shortWarshall(graph,v);
}
}

------------------------------------------------------------------

I have also attached the error that I'm getting as a picture

Runtime Error

Error (stderr)

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Solution.shortWarshall(Solution.java:24) at Solution.main(Solution.java:119

Transcribed Image Text:Your code did not pass this test case. Input (stdin) 5 O 24 10000 10000 20 10000 15 12 0 10000 23 O 31 10000 9 Your Output (stdout) Expected Output 10000 10000 no response on stdout ~ 0 46 15 29 65 24 0 12 26 19 55 31 0 14 50 75 64 76 0 55 20 9 21 35 0 V1 V1 V1 V3 V2 V1 V3 V1 V3 V4 14 O 10000 10000 19 73 55 0
Solution
Bartleby Expert
by Bartleby Expert
SEE SOLUTION
Knowledge Booster
Background pattern image
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
    SEE MORE QUESTIONS
    Recommended textbooks for you
    Text book image
    Database System Concepts
    Computer Science
    ISBN:9780078022159
    Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
    Publisher:McGraw-Hill Education
    Text book image
    Starting Out with Python (4th Edition)
    Computer Science
    ISBN:9780134444321
    Author:Tony Gaddis
    Publisher:PEARSON
    Text book image
    Digital Fundamentals (11th Edition)
    Computer Science
    ISBN:9780132737968
    Author:Thomas L. Floyd
    Publisher:PEARSON
    Text book image
    C How to Program (8th Edition)
    Computer Science
    ISBN:9780133976892
    Author:Paul J. Deitel, Harvey Deitel
    Publisher:PEARSON
    Text book image
    Database Systems: Design, Implementation, & Manag...
    Computer Science
    ISBN:9781337627900
    Author:Carlos Coronel, Steven Morris
    Publisher:Cengage Learning
    Text book image
    Programmable Logic Controllers
    Computer Science
    ISBN:9780073373843
    Author:Frank D. Petruzella
    Publisher:McGraw-Hill Education