Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // A Java program for Dijkstra's single source shortest path algorithm.
- // The program is for adjacency matrix representation of the graph
- import java.util.*;
- import java.util.Scanner;
- import java.lang.*;
- import java.io.*;
- public 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 int SV = 0;
- static int N = 0;
- static int dist[];
- public static int minDistance(int dist[], Boolean sptSet[]) {
- // Initialize min value
- int min = Integer.MAX_VALUE, min_index = -1;
- for (int v = 0; v < N; 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
- public static void printSolution(int dist[], int n) {
- for (int i = 0; i < N; i++)
- System.out.println("[" + dist[i] + "]");
- }
- // Funtion that implements Dijkstra's single source shortest path
- public void dijkstra(int graph[][], int src) {
- int dist[] = new int[N]; // The output array. dist[i] will hold
- // the shortest distance from src to i
- // sptSet[i] will true if vertex i is included in shortest
- // path tree or shortest distance from src to i is finalized
- Boolean sptSet[] = new Boolean[N];
- // Initialize all distances as INFINITE and stpSet[] as false
- for (int i = 0; i < N; i++) {
- dist[i] = Integer.MAX_VALUE;
- 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 < N - 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 < N; 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] != 0 && dist[u] != Integer.MAX_VALUE && dist[u] + graph[u][v] < dist[v])
- dist[v] = dist[u] + graph[u][v];
- }
- // print the constructed distance array
- printSolution(dist, N);
- }
- public static void printMatrix(int[][] Matrix) {
- for (int i = 0; i < N; i++) {
- for (int j = 0; j < N; j++) {
- System.out.print(Matrix[i][j]);
- System.out.print(" ");
- }
- System.out.println();
- }}
- // Driver method
- public static void main(String[] args) throws FileNotFoundException {
- int[][] M = null;
- try {
- int i = 0, j = 0; // counters
- FileInputStream textFile = new FileInputStream("EXAMPLE(2).txt"); // name of input file must go in here
- Scanner scan = new Scanner(textFile);
- N = scan.nextInt(); // read in the size
- String flush = scan.nextLine(); // gets rid of linefeed
- M = new int[N][N]; // instantiates array
- // this loop reads in matrix from input file
- String line;
- while (i < N && (line = scan.nextLine()) != null) {
- j = 0;
- String delim = " ";
- String tokens[] = line.split(delim);
- for (String a : tokens) {
- M[i][j] = Integer.parseInt(a);
- j++;
- }
- i++;
- }
- if (i > N);
- SV = scan.nextInt();
- } catch (Exception e) {
- e.printStackTrace();
- }
- //PrintSolution(dist);
- ShortestPath t = new ShortestPath();
- System.out.println(N);
- printMatrix(M);
- System.out.println(SV);
- System.out.println("\t\t");
- t.dijkstra(M, SV - 1);
- try {
- FileWriter fw = new FileWriter("dijkstra.txt"); // writes transitive closure to file
- for (int i = 0; i < N; i++)
- fw.write(t.dijkstra(M, SV - 1));
- System.out.println("\n");
- fw.write(" \n");
- // fw.write("time in milliseconds" + Ttime / 1000000); // writes runtime to file
- System.out.println("\n");
- fw.close();
- } catch (Exception e) {
- System.out.println(e);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement