Code:
[COLOR=var(--highlight-keyword)]#[COLOR=var(--highlight-keyword)]include[/COLOR] [COLOR=var(--highlight-variable)]<stdio.h>[/COLOR][/COLOR]
[COLOR=var(--highlight-keyword)]#[COLOR=var(--highlight-keyword)]include[/COLOR] [COLOR=var(--highlight-variable)]<stdlib.h>[/COLOR][/COLOR]
[COLOR=var(--highlight-keyword)]#[COLOR=var(--highlight-keyword)]include[/COLOR] [COLOR=var(--highlight-variable)]<stdbool.h>[/COLOR][/COLOR]
[COLOR=var(--highlight-keyword)]#[COLOR=var(--highlight-keyword)]define[/COLOR] MAX 1000[/COLOR]
[COLOR=var(--highlight-keyword)]#[COLOR=var(--highlight-keyword)]define[/COLOR] HEIGHT 24[/COLOR]
[COLOR=var(--highlight-keyword)]#[COLOR=var(--highlight-keyword)]define[/COLOR] WIDTH 81[/COLOR]
[COLOR=var(--highlight-keyword)]void[/COLOR] [COLOR=var(--highlight-literal)]storeMaze[/COLOR]([COLOR=var(--highlight-keyword)]int[/COLOR] N, [COLOR=var(--highlight-keyword)]int[/COLOR] M, [COLOR=var(--highlight-keyword)]int[/COLOR] matrix[N][M], FILE *fp);
[COLOR=var(--highlight-keyword)]int[/COLOR] [COLOR=var(--highlight-literal)]countLines[/COLOR](FILE *fp);
[COLOR=var(--highlight-keyword)]int[/COLOR] [COLOR=var(--highlight-literal)]countColumns[/COLOR](FILE *fp);
[COLOR=var(--highlight-keyword)]int[/COLOR] [COLOR=var(--highlight-literal)]find_path[/COLOR]([COLOR=var(--highlight-keyword)]int[/COLOR] x, [COLOR=var(--highlight-keyword)]int[/COLOR] y, [COLOR=var(--highlight-keyword)]int[/COLOR] maze[HEIGHT][WIDTH]);
[COLOR=var(--highlight-keyword)]void[/COLOR] [COLOR=var(--highlight-literal)]printMaze[/COLOR]([COLOR=var(--highlight-keyword)]int[/COLOR] maze[HEIGHT][WIDTH]);
[COLOR=var(--highlight-keyword)]int[/COLOR] start_x, start_y, end_x, end_y;
[COLOR=var(--highlight-keyword)]int[/COLOR] [COLOR=var(--highlight-literal)]main[/COLOR]([COLOR=var(--highlight-keyword)]int[/COLOR] argc, [COLOR=var(--highlight-keyword)]char[/COLOR] **argv)
{
[COLOR=var(--highlight-keyword)]if[/COLOR](argc != [COLOR=var(--highlight-namespace)]2[/COLOR])
{
[COLOR=var(--highlight-literal)]fprintf[/COLOR]([COLOR=var(--highlight-literal)]stderr[/COLOR], [COLOR=var(--highlight-variable)]"Invalid format.\nCorrect format: %s maze_file.dat\n"[/COLOR], argv[[COLOR=var(--highlight-namespace)]0[/COLOR]]);
[COLOR=var(--highlight-literal)]exit[/COLOR](EXIT_FAILURE);
}
FILE *fin = fopen(argv[[COLOR=var(--highlight-namespace)]1[/COLOR]], [COLOR=var(--highlight-variable)]"rb"[/COLOR]);
[COLOR=var(--highlight-keyword)]if[/COLOR](!fin)
{
[COLOR=var(--highlight-literal)]fprintf[/COLOR]([COLOR=var(--highlight-literal)]stderr[/COLOR], [COLOR=var(--highlight-variable)]"Couldn't open file: %s\n"[/COLOR], argv[[COLOR=var(--highlight-namespace)]1[/COLOR]]);
[COLOR=var(--highlight-literal)]exit[/COLOR](EXIT_FAILURE);
}
[COLOR=var(--highlight-keyword)]int[/COLOR] N = countLines(fin); [COLOR=var(--highlight-comment)]// lines in the matrix[/COLOR]
rewind(fin);
[COLOR=var(--highlight-keyword)]int[/COLOR] M = countColumns(fin); [COLOR=var(--highlight-comment)]// columns in the matrix[/COLOR]
rewind(fin);
[COLOR=var(--highlight-comment)]// printf("Lines: %d | Columns: %d\n", N, M);[/COLOR]
[COLOR=var(--highlight-keyword)]int[/COLOR] maze[N][M];
[COLOR=var(--highlight-comment)]// int sol[N][M];[/COLOR]
storeMaze(N, M, maze, fin);
[COLOR=var(--highlight-keyword)]if[/COLOR](find_path(start_x, start_y, maze) == [COLOR=var(--highlight-literal)]true[/COLOR])
{
printMaze(maze);
}
[COLOR=var(--highlight-keyword)]else[/COLOR]
[COLOR=var(--highlight-literal)]printf[/COLOR]([COLOR=var(--highlight-variable)]"No solution!\n"[/COLOR]);
[COLOR=var(--highlight-comment)]// printf("Lines: %d | Columns: %d\n", N, M);//24 81[/COLOR]
fclose(fin);
[COLOR=var(--highlight-keyword)]return[/COLOR] [COLOR=var(--highlight-namespace)]0[/COLOR];
}
[COLOR=var(--highlight-keyword)]void[/COLOR] [COLOR=var(--highlight-literal)]storeMaze[/COLOR]([COLOR=var(--highlight-keyword)]int[/COLOR] N, [COLOR=var(--highlight-keyword)]int[/COLOR] M, [COLOR=var(--highlight-keyword)]int[/COLOR] matrix[N][M], FILE *fp)
{
[COLOR=var(--highlight-keyword)]int[/COLOR] z=[COLOR=var(--highlight-namespace)]0[/COLOR], i;
[COLOR=var(--highlight-keyword)]char[/COLOR] buf[[COLOR=var(--highlight-namespace)]1000[/COLOR]];
[COLOR=var(--highlight-keyword)]while[/COLOR] (fgets(buf, [COLOR=var(--highlight-keyword)]sizeof[/COLOR] buf, fp))
{
[COLOR=var(--highlight-keyword)]for[/COLOR](i = [COLOR=var(--highlight-namespace)]0[/COLOR]; buf[i] != [COLOR=var(--highlight-variable)]'\n'[/COLOR] && z < N; i++)
{
[COLOR=var(--highlight-keyword)]if[/COLOR](buf[i] == [COLOR=var(--highlight-variable)]'#'[/COLOR])
{
matrix[z][i] = [COLOR=var(--highlight-namespace)]0[/COLOR];
[COLOR=var(--highlight-literal)]putchar[/COLOR]([COLOR=var(--highlight-variable)]'#'[/COLOR]);
}
[COLOR=var(--highlight-keyword)]else[/COLOR] [COLOR=var(--highlight-keyword)]if[/COLOR](buf[i] == [COLOR=var(--highlight-variable)]' '[/COLOR])
{
matrix[z][i] = [COLOR=var(--highlight-namespace)]1[/COLOR];
[COLOR=var(--highlight-literal)]putchar[/COLOR]([COLOR=var(--highlight-variable)]' '[/COLOR]);
}
[COLOR=var(--highlight-keyword)]else[/COLOR] [COLOR=var(--highlight-keyword)]if[/COLOR](buf[i] == [COLOR=var(--highlight-variable)]'S'[/COLOR])
{
start_x = z;
start_y = i;
matrix[z][i] = [COLOR=var(--highlight-namespace)]2[/COLOR];
[COLOR=var(--highlight-literal)]putchar[/COLOR]([COLOR=var(--highlight-variable)]'S'[/COLOR]);
}
[COLOR=var(--highlight-keyword)]else[/COLOR] [COLOR=var(--highlight-keyword)]if[/COLOR](buf[i] == [COLOR=var(--highlight-variable)]'E'[/COLOR])
{
end_x = z;
end_y = i;
matrix[z][i] = [COLOR=var(--highlight-namespace)]3[/COLOR];
[COLOR=var(--highlight-literal)]putchar[/COLOR]([COLOR=var(--highlight-variable)]'E'[/COLOR]);
}
[COLOR=var(--highlight-comment)]//printf("%d ", matrix[z][i]);[/COLOR]
}
[COLOR=var(--highlight-literal)]putchar[/COLOR]([COLOR=var(--highlight-variable)]'\n'[/COLOR]);
z++;
}
[COLOR=var(--highlight-literal)]putchar[/COLOR]([COLOR=var(--highlight-variable)]'\n'[/COLOR]);
[COLOR=var(--highlight-literal)]printf[/COLOR]([COLOR=var(--highlight-variable)]"The starting point: (%d,%d)\n"[/COLOR], start_x, start_y);
[COLOR=var(--highlight-literal)]printf[/COLOR]([COLOR=var(--highlight-variable)]"The end point: (%d,%d)\n"[/COLOR], end_x, end_y);
}
[COLOR=var(--highlight-keyword)]int[/COLOR] [COLOR=var(--highlight-literal)]countLines[/COLOR](FILE *fp)
{
[COLOR=var(--highlight-keyword)]char[/COLOR] c;
[COLOR=var(--highlight-keyword)]int[/COLOR] count = [COLOR=var(--highlight-namespace)]0[/COLOR];
[COLOR=var(--highlight-keyword)]while[/COLOR]((c = fgetc(fp)) != EOF)
{
[COLOR=var(--highlight-keyword)]if[/COLOR] (c == [COLOR=var(--highlight-variable)]'\n'[/COLOR]) [COLOR=var(--highlight-comment)]// Increment count if this character is newline[/COLOR]
{
count++;
}
}
[COLOR=var(--highlight-keyword)]return[/COLOR] count;
}
[COLOR=var(--highlight-keyword)]int[/COLOR] [COLOR=var(--highlight-literal)]countColumns[/COLOR](FILE *fp)
{
[COLOR=var(--highlight-keyword)]char[/COLOR] c;
[COLOR=var(--highlight-keyword)]int[/COLOR] count = [COLOR=var(--highlight-namespace)]0[/COLOR];
[COLOR=var(--highlight-keyword)]while[/COLOR]((c = fgetc(fp)) != EOF)
{
[COLOR=var(--highlight-keyword)]if[/COLOR] (c == [COLOR=var(--highlight-variable)]'\n'[/COLOR]) [COLOR=var(--highlight-comment)]// Increment count if this character is newline[/COLOR]
{
[COLOR=var(--highlight-keyword)]break[/COLOR];
}
count++;
}
[COLOR=var(--highlight-keyword)]return[/COLOR] count;
}
[COLOR=var(--highlight-keyword)]int[/COLOR] [COLOR=var(--highlight-literal)]find_path[/COLOR]([COLOR=var(--highlight-keyword)]int[/COLOR] x, [COLOR=var(--highlight-keyword)]int[/COLOR] y, [COLOR=var(--highlight-keyword)]int[/COLOR] maze[HEIGHT][WIDTH])
{
[COLOR=var(--highlight-comment)]// If x,y is outside maze, return false.[/COLOR]
[COLOR=var(--highlight-keyword)]if[/COLOR] ( x < [COLOR=var(--highlight-namespace)]0[/COLOR] || x > HEIGHT - [COLOR=var(--highlight-namespace)]1[/COLOR] || y < [COLOR=var(--highlight-namespace)]0[/COLOR] || y > WIDTH - [COLOR=var(--highlight-namespace)]1[/COLOR] )
[COLOR=var(--highlight-keyword)]return[/COLOR] [COLOR=var(--highlight-literal)]false[/COLOR];
[COLOR=var(--highlight-comment)]// If x,y is the goal, return true.[/COLOR]
[COLOR=var(--highlight-keyword)]if[/COLOR] ( maze[y][x] == [COLOR=var(--highlight-namespace)]3[/COLOR] ) [COLOR=var(--highlight-comment)]// 'E' - end point [/COLOR]
[COLOR=var(--highlight-keyword)]return[/COLOR] [COLOR=var(--highlight-literal)]true[/COLOR];
[COLOR=var(--highlight-comment)]// If x,y is not open, return false.[/COLOR]
[COLOR=var(--highlight-keyword)]if[/COLOR] ( maze[y][x] != [COLOR=var(--highlight-namespace)]1[/COLOR] && maze[y][x] != [COLOR=var(--highlight-namespace)]2[/COLOR] )
[COLOR=var(--highlight-keyword)]return[/COLOR] [COLOR=var(--highlight-literal)]false[/COLOR];
[COLOR=var(--highlight-comment)]// Mark x,y part of solution path.[/COLOR]
maze[y][x] = [COLOR=var(--highlight-variable)]'.'[/COLOR];
[COLOR=var(--highlight-comment)]// If find_path North of x,y is true, return true.[/COLOR]
[COLOR=var(--highlight-keyword)]if[/COLOR] ( find_path(x, y - [COLOR=var(--highlight-namespace)]1[/COLOR], maze) == [COLOR=var(--highlight-literal)]true[/COLOR] )
[COLOR=var(--highlight-keyword)]return[/COLOR] [COLOR=var(--highlight-literal)]true[/COLOR];
[COLOR=var(--highlight-comment)]// If find_path East of x,y is true, return true.[/COLOR]
[COLOR=var(--highlight-keyword)]if[/COLOR] ( find_path(x + [COLOR=var(--highlight-namespace)]1[/COLOR], y, maze) == [COLOR=var(--highlight-literal)]true[/COLOR] )
[COLOR=var(--highlight-keyword)]return[/COLOR] [COLOR=var(--highlight-literal)]true[/COLOR];
[COLOR=var(--highlight-comment)]// If find_path South of x,y is true, return true.[/COLOR]
[COLOR=var(--highlight-keyword)]if[/COLOR] ( find_path(x, y + [COLOR=var(--highlight-namespace)]1[/COLOR], maze) == [COLOR=var(--highlight-literal)]true[/COLOR] )
[COLOR=var(--highlight-keyword)]return[/COLOR] [COLOR=var(--highlight-literal)]true[/COLOR];
[COLOR=var(--highlight-comment)]// If find_path West of x,y is true, return true.[/COLOR]
[COLOR=var(--highlight-keyword)]if[/COLOR] ( find_path(x - [COLOR=var(--highlight-namespace)]1[/COLOR], y, maze) == [COLOR=var(--highlight-literal)]true[/COLOR] )
[COLOR=var(--highlight-keyword)]return[/COLOR] [COLOR=var(--highlight-literal)]true[/COLOR];
[COLOR=var(--highlight-comment)]// Unmark x,y as part of solution path.[/COLOR]
maze[y][x] = [COLOR=var(--highlight-namespace)]0[/COLOR]; [COLOR=var(--highlight-comment)]// mark this as a wall[/COLOR]
[COLOR=var(--highlight-keyword)]return[/COLOR] [COLOR=var(--highlight-literal)]false[/COLOR];
}
[COLOR=var(--highlight-keyword)]void[/COLOR] [COLOR=var(--highlight-literal)]printMaze[/COLOR]([COLOR=var(--highlight-keyword)]int[/COLOR] maze[HEIGHT][WIDTH]) {
[COLOR=var(--highlight-keyword)]for[/COLOR] ([COLOR=var(--highlight-keyword)]int[/COLOR] i = [COLOR=var(--highlight-namespace)]0[/COLOR]; i < HEIGHT; i++) {
[COLOR=var(--highlight-keyword)]for[/COLOR] ([COLOR=var(--highlight-keyword)]int[/COLOR] j = [COLOR=var(--highlight-namespace)]0[/COLOR]; j < WIDTH; j++) {
[COLOR=var(--highlight-literal)]printf[/COLOR]([COLOR=var(--highlight-variable)]"%d "[/COLOR], maze[i][j]);
}
[COLOR=var(--highlight-literal)]putchar[/COLOR]([COLOR=var(--highlight-variable)]'\n'[/COLOR]);
}
}
But I'm not getting any solution.