4. boolean solveMaze(var maze, var location) { if (reach the goal) return true; else { // moving to an empty cell if ((down-cell is empty) || (right-cell is empty) || (up-cell is empty) || (left-cell is empty)) { maze[location] = ‘X’; // mark the location if (down-cell is empty) return solveMaze(maze, down-cell); else if (right-cell is empty) return solveMaze(maze, right-cell); else if (up-cell is empty) return solveMaze(maze, up-cell); else if (left-cell is empty) return solveMaze(maze, left-cell); } // backtracking else if ((down-cell is marked) || (right-cell is marked) || (up-cell is marked) || (left-cell is marked)) { maze[location] = ‘#’; // block the location if (down-cell is marked) return solveMaze(maze, down-cell); else if (right-cell is marked) return solveMaze(maze, right-cell); else if (up-cell is marked) return solveMaze(maze, up-cell); else if (left-cell is marked) return solveMaze(maze, left-cell); else return false; // path does not exist } } }
5.
6. boolean solveMaze(int r, int c) { if (r == MAX-1 && c == MAX-1) return true; // reaches the exit else if (maze[r+1][c]=='.') || (maze[r-1][c]=='.') || (maze[r][c+1]=='.') || (maze[r][c-1]=='.')) { maze[r][c] = '+'; // moves to an empty cell if (maze[r+1][c] == '.') r++; else if (maze[r][c+1] == '.') c++; else if (maze[r-1][c] == '.') r--; else if (maze[r][c-1] == '.') c--; } else { maze[r][c] = '-'; // backtracks if (maze[r+1][c] == '+') r++; else if (maze[r][c+1] == '+') c++; else if (maze[r-1][c] == '+') r--; else if (maze[r][c-1] == '+') c--; else return false; // no path exists } return solveMaze(r, c); } Examples 1.1