Advertisement
AlimusSifar

Little Corona - Toph.co - Contest

Mar 10th, 2020
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.39 KB | None | 0 0
  1. import java.util.*;
  2. public class solution {
  3.     public static void main(String[] args) {
  4.         Scanner sc = new Scanner(System.in);
  5.         // takes N = Cities, M = Roads, creates a MATRIX box
  6.         int N = sc.nextInt(), M = sc.nextInt();
  7.         int[][] matrix = new int[N][N];
  8.  
  9.         for (int i = 0; i < M; i++) {
  10.             matrix[sc.nextInt()][sc.nextInt()] = sc.nextInt();
  11.         }
  12.  
  13.         int[] d = getShortestPath(matrix, N);
  14.  
  15.         for (int i = 1; i < d.length; i++) {
  16.             System.out.println(d[i]);
  17.         }
  18.     }
  19.  
  20.     public static int[] getShortestPath(int[][] mat, int v) {
  21.         int[][] matrix = mat; // contains the graph
  22.         int[] d = new int[v]; // contains the distance
  23.         int[] check = new int[v]; // checks for the visited vertices
  24.  
  25.         shortPath(matrix, d, check);
  26.         return d;
  27.     }
  28.  
  29.     public static void shortPath(int[][] matrix, int[] d, int[] check) {
  30.         for (int i = 0; i < matrix.length; i++) {
  31.             d[i] = 999999;
  32.         }
  33.         // Taking source = 0
  34.         d[matrix.length-1] = 0;
  35.  
  36.         // loop for all vertices
  37.         for (int i = 0; i < matrix.length; i++) {
  38.             int u = minVertex(matrix, d, check);
  39.             for (int v = 0; v < matrix.length; v++) {
  40.                 // check for connections
  41.                 if (matrix[u][v] != 0 && check[v] != -1) {
  42.                     if (d[v] > d[u] + matrix[u][v]) {
  43.                         d[v] = d[u] + matrix[u][v];
  44.                     }
  45. //                    System.out.println(d[v]); // TEST ONLY
  46.                 }
  47.             }
  48.         }
  49.     }
  50.  
  51.     public static int minVertex(int[][] matrix, int[] d, int[] check) {
  52.         int vertex = -1;
  53.         // check for unchecked vertexes
  54.         for (int i = 0; i < matrix.length; i++) {
  55.             if (check[i] != -1) {
  56.                 // -1 in check means visited vertex
  57.                 vertex = i;
  58.                 break;
  59.             }
  60.         }
  61.         // finding the vertex with minimum d
  62.         int minVal = d[vertex];
  63.         if (vertex != -1) {
  64.             for (int i = vertex + 1; i < matrix.length; i++) {
  65.                 if (check[i] != -1 && d[i] < minVal) {
  66.                     minVal = d[i];
  67.                     vertex = i;
  68.                 }
  69.             }
  70.         }
  71.         // check vertex to -1, as Visited
  72.         check[vertex] = -1;
  73.         return vertex;
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement