Maze Solver
In my spare time this weekend, I wrote a maze solving algorithm, which is reminiscent of a program I wrote as homework over a year ago, but slightly better. Its still wasteful in terms of efficient moves, but the improvements can come later. Here’s a snippet of some methods from it, for the curious:
private Point findStart() { for(int y = 0; y < m_mazeNodes.length; y++) { for(int x = 0; x < m_mazeNodes[y].length; x++) { if(m_mazeNodes[y][x].getState() == MazeNode.SlotValue.start) return new Point(x, y); } } return null; } public void solve() { Point start = findStart(); solveRecursive(start.x, start.y); } private void solveRecursive(int currentX, int currentY) { if(m_solved == true) return; if(isValidLocation(currentX, currentY) == false) return; if(m_mazeNodes[currentY][currentX].getState() == MazeNode.SlotValue.end) { m_solved = true; return; } if(m_mazeNodes[currentY][currentX].getState() == MazeNode.SlotValue.visited) return; if(m_mazeNodes[currentY][currentX].getState() == MazeNode.SlotValue.wall) return; if (m_mazeNodes[currentY][currentX].getState() != MazeNode.SlotValue.start) m_mazeNodes[currentY][currentX].setState(MazeNode.SlotValue.visited); solveRecursive(currentX+1, currentY); solveRecursive(currentX, currentY+1); solveRecursive(currentX-1, currentY); solveRecursive(currentX, currentY-1); } private boolean isValidLocation(int x, int y) { if(x < 0) return false; if(y < 0) return false; if(y > m_mazeNodes.length-1) return false; if(x > m_mazeNodes[y].length-1) return false; return true; }