I have following Java class called TheNewMario
. It reads a String
path and iterates through the path from S
to F
. If the path is closed, we assume the runner can jump. The class returns the amount of steps it takes to get from S
to F
.
I have added two path files. In the first example path, it works fine, but when the path gets bigger it takes longer to execute. I am very sure that the performance of processing a bigger path should not take longer than 30-60 seconds. but in my case it takes over 30 minutes, and does not return an error. I use the BFS (breadth-first search) algorithm.
What can I do to optimize the performance of this?
public class TheNewMario {
private static int maxX = 0;
private static int maxY = 0;
private BufferedReader fileRead = null;
private static int[][] mapXY;
private HashSet visitedLocation = new HashSet();
public static void main(String[] args) {
TheNewMario mario = new TheNewMario();
mario.pathFileReader(args);
System.out.println(mario.bfs());
}
private int bfs() {
Queue<Node> queue = new Queue<Node>();
for (int y = 0; y < maxY; y++) {
for (int x = 0; x < maxX; x++) {
if (mapXY[x][y] == 2) {
queue.enqueue(new Node(x, y, 0, 0));
visitedLocation.add(new Node(x, y, 0, 0));
}
}
}
int disCount = 1;
while (!queue.isEmpty()) {
int queueSize = queue.size();
for (int i = 0; i < queueSize; i++) {
Node node = queue.dequeue();
if (mapXY[node.posX][node.posY] == 3) {
return disCount;
}
visitedLocation.add(node);
ArrayList<Node> results = generateNeighbours(node);
for (Node in : results) {
queue.enqueue(in);
}
}
disCount++;
System.out.print(".");
System.out.print(": " + disCount);
}
return -1;
}
private class Node {
final int posX;
final int posY;
final int velX;
final int velY;
public Node(int posX, int posY, int velX, int velY) {
this.posX = posX;
this.posY = posY;
this.velX = velX;
this.velY = velY;
}
@Override
public boolean equals(Object thatobject) {
Node that = (Node) thatobject;
if (this.posX == that.posX && this.posY == that.posY && this.velX == that.velX && this.velY == that.velY)
return true;
else return false;
}
public int hashCode() {
String hs = " " + posX + posY + velX + velY;
return hs.hashCode();
}
}
private ArrayList<Node> generateNeighbours(Node node) {
ArrayList<Node> neighbours = new ArrayList<Node>();
for (int x = -1; x < 2; x++) {
for (int y = -1; y < 2; y++) {
Node in = new Node(
node.posX + node.velX + x,
node.posY + node.velY + y,
node.velX + x,
node.velY + y
);
if (in.posX >= 0 &&
in.posX < maxX &&
in.posY >= 0 &&
in.posY < maxY &&
mapXY[in.posX][in.posY] %2 == 1 &&
!visitedLocation.contains(in)
) {
neighbours.add(in);
}
}
}
return neighbours;
}
private void pathFileReader(String[] args) {
File fileName = new File(args[0]);
int lineCount = 0;
String line;
if (!fileName.exists()) {
System.out.println(args[0] + " does not exist.");
return;
}
if (!(fileName.isFile() && fileName.canRead())) {
System.out.println(fileName.getName() + " cannot be read from.");
return;
}
try {
fileRead = new BufferedReader(new FileReader(fileName));
maxY = Integer.parseInt(fileRead.readLine());
maxX = Integer.parseInt(fileRead.readLine());
mapXY = new int[maxX][maxY];
while ((line = fileRead.readLine()) != null) {
for (int x = 0; x < maxX; x++) {
switch (line.charAt(x)) {
case 32:
mapXY[x][lineCount] = 1;
break;
case 79:
mapXY[x][lineCount] = 0;
break;
case 83:
mapXY[x][lineCount] = 2;
break;
case 70:
mapXY[x][lineCount] = 3;
break;
}
}
lineCount++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Path1.txt
40
40
OSOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
O F
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Path2.txt
80
80
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
S OOOO
S OOO
S OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO FFF OOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOO OOOOOOOOOOOOO OOOOOOOOOOOOO OOO OO
OO OOOOOOOO OOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
OO OO
OOO OOO
OOOO OOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO