import java.util.Random;
public class MazeGenerator {
private static final int ROWS = 10;
private static final int COLS = 10;
private static final int[][] MAZE = new int[ROWS][COLS];
public static void main(String[] args) {
for (int row = 0; row < ROWS; row++) {
for (int col = 0; col < COLS; col++) {
MAZE[row][col] = 1;
}
}
Random rand = new Random();
int currentRow = rand.nextInt(ROWS);
int currentCol = rand.nextInt(COLS);
generateMaze(currentRow, currentCol);
for (int row = 0; row < ROWS; row++) {
for (int col = 0; col < COLS; col++) {
System.out.print(MAZE[row][col] == 1 ? "# " : " ");
}
System.out.println();
}
}
private static void generateMaze(int row, int col) {
MAZE[row][col] = 0;
Random rand = new Random();
while (hasUnvisitedNeighbors(row, col)) {
int[] neighbor = getRandomNeighbor(row, col);
int nextRow = neighbor[0];
int nextCol = neighbor[1];
if (MAZE[nextRow][nextCol] == 1) {
removeWall(row, col, nextRow, nextCol);
generateMaze(nextRow, nextCol);
}
}
}
private static boolean hasUnvisitedNeighbors(int row, int col) {
return (row > 0 && MAZE[row - 1][col] == 1) ||
(row < ROWS - 1 && MAZE[row + 1][col] == 1) ||
(col > 0 && MAZE[row][col - 1] == 1) ||
(col < COLS - 1 && MAZE[row][col + 1] == 1);
}
private static int[] getRandomNeighbor(int row, int col) {
Random rand = new Random();
int[] neighbor = new int[2];
int direction = rand.nextInt(4);
if (direction == 0 && row > 0) {
neighbor[0] = row - 1;
neighbor[1] = col;
} else if (direction == 1 && row < ROWS - 1) {
neighbor[0] = row + 1;
neighbor[1] = col;
} else if (direction == 2 && col > 0) {
neighbor[0] = row;
neighbor[1] = col - 1;
} else if (direction == 3 && col < COLS - 1) {
neighbor[0] = row;
neighbor[1] = col + 1;
}
return neighbor;
}
private static void removeWall(int row1, int col1, int row2, int col2) {
if (row1 == row2) {
if (col1 > col2) {
MAZE[row1][col1 - 1] = 0;
} else {
MAZE[row1][col1 + 1] = 0;
}
} else {
if (row1 > row2) {
MAZE[row1 - 1][col1] = 0;
} else {
MAZE[row1 + 1][col1] = 0;
}
}
}
}