I've been trying for 3 hours and I just can't understand what is happening here.
I have an enum 'Maze'. For some reason, when the method 'search' is called on this enum it's EXTREMELY slow (3 minutes to run). However, if I copy the same method to another class as a static method, and I call it from the enum 'Maze' it runs in one second!
I don't understand why? is there any problem with recursive methods in Java enums?? What am I doing wrong?
public enum Maze
{
A("A.txt"), B("B.txt");
// variables here...
Maze(String fileName)
{
loadMap(fileName);
nodeDistances = new int[nodes.size()][nodes.size()];
setNeighbors();
setDistances();
}
... more methods here ...
private void setDistances()
{
nodeDistances = new int[nodes.size()][nodes.size()];
for (int i = 0; i < nodes.size(); i++) {
setMax(nodeDistances[i]);
// This works!!!
TestMaze.search(nodes, nodeDistances[i], i, 0);
// This DOESN'T WORK
//search(nodes, nodeDistances[i], i, 0);
}
}
public void setMax(int[] a) {
for (int i=0; i<a.length; i++) {
a[i] = Integer.MAX_VALUE;
}
}
public void search(List<Node> allNodes, int[] distances, int curNodeIndex, int curDist)
{
if (curDist < distances[curNodeIndex])
{
distances[curNodeIndex] = curDist;
for (Node n : allNodes.get(curNodeIndex).getNeighbors()) {
search(allNodes, distances, n.getNodeIndex(), curDist + 1);
}
}
}
}
public class TestMaze
{
public static void search(List<Node> allNodes, int[] distances, int curNodeIndex, int curDist)
{
if (curDist < distances[curNodeIndex])
{
distances[curNodeIndex] = curDist;
for (Node n : allNodes.get(curNodeIndex).getNeighbors()) {
search(allNodes, distances, n.getNodeIndex(), curDist + 1);
}
}
}
}