maze finally
This commit is contained in:
@@ -1,40 +1,89 @@
|
||||
#include <stdio.h>
|
||||
#define SIZE 12
|
||||
|
||||
void mazeTraverse(char maze_data[SIZE][SIZE], int currentRow, int currentCol, int startRow, int startCol, int visited);
|
||||
void printMaze(char maze_data[SIZE][SIZE]);
|
||||
|
||||
int main(void) {
|
||||
char maze[SIZE][SIZE];
|
||||
|
||||
// Initialize all rows
|
||||
char *maze_data[SIZE] = {
|
||||
"############",
|
||||
"#...#......#",
|
||||
"..#.#......#",
|
||||
"###.#....#.#",
|
||||
"#....###.#.#",
|
||||
"#####.#.#.#.",
|
||||
"#..#.#.#.#.#",
|
||||
"##.#.#.#.#.#",
|
||||
"#........#.#",
|
||||
"######.###.#",
|
||||
"#......#...#",
|
||||
"############"
|
||||
char maze_data[SIZE][SIZE] = {
|
||||
{'#','#','#','#','#','#','#','#','#','#','#','#'},
|
||||
{'#','.','.','.','#','.','.','.','.','.','.','#'},
|
||||
{'.','.','#','.','#','.','#','#','#','#','.','#'},
|
||||
{'#','#','#','.','#','.','.','.','.','#','.','#'},
|
||||
{'#','.','.','.','.','#','#','#','.','#','.','.'},
|
||||
{'#','#','#','#','.','#','.','#','.','#','.','#'},
|
||||
{'#','.','.','#','.','#','.','#','.','#','.','#'},
|
||||
{'#','#','.','#','.','#','.','#','.','#','.','#'},
|
||||
{'#','.','.','.','.','.','.','.','.','#','.','#'},
|
||||
{'#','#','#','#','#','#','.','#','#','#','.','#'},
|
||||
{'#','.','.','.','.','.','.','#','.','.','.','#'},
|
||||
{'#','#','#','#','#','#','#','#','#','#','#','#'}
|
||||
};
|
||||
|
||||
// Copy the maze data (more efficient than individual assignments)
|
||||
for(int i = 0; i < SIZE; i++) {
|
||||
for(int j = 0; j < SIZE; j++) {
|
||||
maze[i][j] = maze_data[i][j];
|
||||
}
|
||||
}
|
||||
|
||||
// Print the entire maze
|
||||
printf("12x12 Maze:\n");
|
||||
for(int i = 0; i < SIZE; i++) {
|
||||
for(int j = 0; j < SIZE; j++) {
|
||||
printf("%c", maze[i][j]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
int startRow = 2, startCol = 0;
|
||||
|
||||
puts("Maze");
|
||||
printMaze(maze_data);
|
||||
puts(""); puts("Starting Maze Treversal");
|
||||
|
||||
mazeTraverse(maze_data, startRow, startCol, startRow, startCol, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mazeTraverse(char maze_data[SIZE][SIZE], int currentRow, int currentCol, int startRow, int startCol, int visited) {
|
||||
if(!(currentRow == 0 || currentCol == 0) || visited > 0) {
|
||||
maze_data[currentRow][currentCol] = 'X';
|
||||
}
|
||||
|
||||
printf("Step %d\n", visited++);
|
||||
printMaze(maze_data);
|
||||
puts("");
|
||||
|
||||
if ((currentRow == 0 || currentRow == SIZE-1 || currentCol == 0 || currentCol == SIZE-1) &&
|
||||
!(currentRow == startRow && currentCol == startCol)) {
|
||||
printf("Exit found at (%d, %d)!\n", currentRow, currentCol);
|
||||
return;
|
||||
}
|
||||
|
||||
if (visited > 0 && currentRow == startRow && currentCol == startCol) {
|
||||
puts("No exit found!");
|
||||
return;
|
||||
}
|
||||
|
||||
//RIGHT HAND RULE!
|
||||
//always turn right:
|
||||
int move = 0;
|
||||
int direct[4][2] = {{0, 1}, {1,0}, {0, -1}, {-1, 0}}; //Right, down, left, up
|
||||
int searchRow, searchCol;
|
||||
|
||||
for(int i = 0; i < 4 && !move; i++) {
|
||||
int directOrder[4] = {0, 1, 2, 3}; //Right, down, left, up
|
||||
|
||||
searchRow = currentRow + direct[directOrder[i]][0];
|
||||
searchCol = currentCol + direct[directOrder[i]][1];
|
||||
|
||||
if (searchRow >= 0 && searchRow < SIZE && searchCol >= 0 && searchCol < SIZE && maze_data[searchRow][searchCol] != '#') {
|
||||
if (maze_data[currentRow][currentCol] != 'X' || (currentRow == startRow && currentCol == startCol)) {
|
||||
mazeTraverse(maze_data, searchRow, searchCol, startRow, startCol, visited+1);
|
||||
move = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!move && !(currentRow == 0 || currentRow == SIZE-1 ||
|
||||
currentCol == 0 || currentCol == SIZE-1) &&
|
||||
!(currentRow == startRow && currentCol == startCol)) {
|
||||
printf("Stuck at pos(%d, %d)\n", currentRow, currentCol);
|
||||
}
|
||||
}
|
||||
|
||||
void printMaze(char maze_data[SIZE][SIZE]) {
|
||||
for(size_t i = 0; i < SIZE; i++) {
|
||||
for(size_t j = 0; j < SIZE; j++) {
|
||||
printf("%c\n", maze_data[i][j]);
|
||||
}
|
||||
puts("");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user