I have a personal coding question. I'm trying to code in java a Floyd-Warshall algorithm, with a predecessor matrix. My goal is to return both the matrix array and predMatrix which I don't know how to do, and also when I ran it with just returning one array the matrix one, I get a indexoutOfboundsException: -1 at java.util.ArrayList.elementData(Unknown Source) at java.util.ArrayList.get(Unknown Source)
public int[][] floydWarshall(Graph g) {
ArrayList<Edge> n = g.getEdgeList();
int[][] matrix = new int[n.size()][n.size()];
int[][] predMatrix = new int[0][0];
for(int k = 0; k <= n.size(); k++) {
for(int i = 0; i < n.size(); i++) {
for(int j = 0; j < n.size(); j++) {
String label = n.get(k - 1).getLabel();
String label2 = n.get(i).getLabel();
String label3 = n.get(j).getLabel();
//String predessor = n.get(k).getTail().getName();
int kDistance = Integer.parseInt(label);
int iDistance = Integer.parseInt(label2);
int jDistance = Integer.parseInt(label3);
if((matrix[iDistance][jDistance] == Integer.MAX_VALUE) &&
(matrix[iDistance][kDistance] + matrix[kDistance][jDistance] == Integer.MAX_VALUE)) {
continue;
//matrix[iDistance][jDistance] = kDistance;
} else if(matrix[iDistance][jDistance] <= matrix[iDistance][kDistance] + matrix[kDistance][jDistance])
matrix[iDistance][jDistance] = matrix[iDistance][jDistance];
predMatrix[iDistance][jDistance] = predMatrix[iDistance][jDistance];
}else {
matrix[iDistance][jDistance] = matrix[iDistance][kDistance] + matrix[kDistance][jDistance];
predMatrix[iDistance][jDistance] = predMatrix[kDistance][jDistance];
}
}
}
}
return matrix;
}