title: Exception in thread "main" java.lang.StackOverflowError after running Dijkstra's algorithm in an adjacency matrix
body: <p>I am trying to print the shortest path after running Dijkstra's algorithm in a weighted adjacency matrix. I am getting a stackoverflow error when trying to printout the path.  </p>
  
  <p>I have tried changing the start node into a type long and BigInteger as advised by previous answers on this platform also I am aware that I am using a recursive method whereby that problem lies.</p>
  
  <pre><code>import java.util.*;
  
  public class djikstra {
  
  private static final int invalid = -1;
  
  public djikstra(int matrix[][],int start) {
  
      int numVertices = matrix[0].length;
      int [] distances = new int [numVertices];
      boolean [] isAdded = new boolean[numVertices];
  
      for (int i=0;i&lt;numVertices;i++) {
          distances[i]= Integer.MAX_VALUE;
          isAdded[i] = false;
      }
  
      distances[(int) start]=0;
      int [] parents = new int [numVertices];
      parents[start] = invalid;
  
      for(int i=1;i&lt;numVertices;i++) {
          int closestNeighbour = -1;
          int shortDist = Integer.MAX_VALUE;
  
      for(int j=0; j &lt;numVertices;j++) {
          if(!isAdded[j] &amp;&amp; distances[j]&lt;shortDist) {
              closestNeighbour = j;
              shortDist = distances[j];
          }
      }
      isAdded[closestNeighbour]=true;
  
      for(int j = 0; j &lt;numVertices;j++) {
          int edgeDist = matrix[closestNeighbour][j];
          if(edgeDist &gt; 0 &amp;&amp; ((closestNeighbour+edgeDist)&lt;distances[j])) {
              parents[j] = closestNeighbour;
              distances[j] = shortDist + edgeDist;
          }
      }
  }
      printSol(start,distances,parents);
   }
  
  private static void printSol(int start,int[] distances,int[] parents) {
      int numVertices=distances.length;
      for(int i=0;i&lt;numVertices;i++) {
          if(i !=start) {
              path(i,parents);
          }
   }
  }
  
  private static void path(int curr,int[]parents) {
      if(curr== -1) {
          return;
      }
  
      path(parents[curr],parents);
  
  }
  }
  
  public static void Main(String args[]){
         int matrix2[][]= {{0, 0, 0, 4, 12, 14, 0, 0, 0, 0, 0 ,0, 0, 0}, 
             {0, 0, 0, 0, 0, 0, 0, 12, 0, 8, 0, 18, 15, 7},
             {0, 0, 0, 11, 3, 3, 0, 0, 0, 0, 0, 13, 8, 10}, 
             {4, 0, 0, 0, 10, 12, 0, 0, 0, 0, 10, 10, 13, 0}, 
             {0, 0, 3, 10, 0, 2, 0, 0, 0, 0, 0, 10, 5, 11}, 
             {0, 0, 3, 12, 2, 0, 0, 0, 0, 0, 0, 10, 5, 9 },
             {20, 0, 0, 0, 0, 0, 0, 14, 10, 20, 16, 22, 0, 0}, 
             {0, 12, 0, 0, 0 ,0 ,14, 0, 4, 6, 12, 0,0, 0 },
             {0, 16, 0, 0, 0, 0, 10, 4, 0, 10, 14, 20, 0, 0}, 
             {0, 8, 0, 0, 0, 0, 0, 6, 10, 0, 18, 0, 0, 15 },
             {0, 0, 0, 10, 0, 0, 0, 12, 0, 0, 0, 6, 11, 11}, 
             {0, 0, 0, 10, 10, 10, 0, 0, 0, 0, 6, 0, 5, 11}, 
             {0, 0, 8, 0, 5, 5, 0, 0, 0, 0, 11, 5, 0, 8}, 
             {0, 7, 10, 0, 11, 9, 0, 0, 0, 0, 0, 11, 8, 0}};
  
      djikstra doDjikstra = new djikstra(matrix2,0);
  }   
  
  
  
  Expected results:
  0 4 13 1
  Actual results:
  Exception in thread "main" java.lang.StackOverflowError
  at helperclasses.djikstra.path(djikstra.java:61)
  </code></pre>