#include <stdio.h>
#define N 4
int isSafe(int maze[N][N], int x, int y) {
return (x >= 0 && x < N && y >= 0 && y < N && maze[x][y] == 1);
}
int solveMazeUtil(int maze[N][N], int x, int y, int sol[N][N]) {
if (x == N - 1 && y == N - 1 && maze[x][y] == 1) {
sol[x][y] = 1; // mark goal cell
return 1;
}
if (isSafe(maze, x, y) == 1) {
if (sol[x][y] == 1) // already part of path
return 0;
sol[x][y] = 1; // mark current cell as part of path
if (solveMazeUtil(maze, x + 1, y, sol) == 1) // move down
return 1;
if (solveMazeUtil(maze, x, y + 1, sol) == 1) // move right
return 1;
sol[x][y] = 0; // backtrack
return 0;
}
return 0;
}
void printSolution(int sol[N][N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", sol[i][j]);
}
printf("\n");
}
}
int main() {
int maze[N][N] = {
{1, 0, 0, 0},
{1, 1, 0, 0},
{0, 1, 0, 0},
{0, 1, 1, 1}
};
int sol[N][N] = {0};
if (solveMazeUtil(maze, 0, 0, sol) == 1) {
printSolution(sol);
} else {
printf("No path found\n");
}
return 0;
}
if (x == N - 1 && y == N - 1 && maze[x][y] == 1) {
Check if current cell is goal and open
sol[x][y] = 1; // mark current cell as part of path
Mark cell as part of solution path
if (solveMazeUtil(maze, x + 1, y, sol) == 1) // move down
Try moving down recursively
if (solveMazeUtil(maze, x, y + 1, sol) == 1) // move right
Try moving right recursively
sol[x][y] = 0; // backtrack
Remove cell from path if no way forward
1 0 0 0
1 1 0 0
0 1 0 0
0 1 1 1