typedef struct LINKED_STACK_NODE_s *LINKED_STACK_NODE;
typedef struct LINKED_STACK_NODE_s
{
LINKED_STACK_NODE next;
void *data;
} LINKED_STACK_NODE_t[1];
typedef struct LINKED_STACK_s
{
LINKED_STACK_NODE head;
int count;
} LINKED_STACK_t[1], *LINKED_STACK;
typedef struct
{
int R;
int C;
} POS_t[1], *POS;
LINKED_STACK stack_init();
void stack_free(LINKED_STACK stack);
void stack_push(LINKED_STACK stack, void *data);
void *stack_pop(LINKED_STACK stack);
void *stack_top(LINKED_STACK stack);
int is_empty(LINKED_STACK stack);
int is_empty(LINKED_STACK stack)
{
return stack->head == NULL;
}
LINKED_STACK stack_init()
{
LINKED_STACK stack = (LINKED_STACK)malloc(sizeof(LINKED_STACK_t));
if (stack == NULL)
{
printf("\nproblem with initializing stack\n\n");
return NULL;
}
stack->head = NULL;
stack->count = 0;
return stack;
}
void stack_free(LINKED_STACK stack)
{
while (is_empty(stack) == 0)
{
stack_pop(stack);
}
free(stack);
}
void stack_push(LINKED_STACK stack, void *data)
{
LINKED_STACK_NODE node = (LINKED_STACK_NODE)malloc(sizeof(LINKED_STACK_NODE_t));
if (node == NULL)
{
printf("\nproblem with the creation of a node\n\n");
return;
}
node->data = data;
node->next = stack->head;
stack->head = node;
stack->count++;
}
void *stack_pop(LINKED_STACK stack)
{
LINKED_STACK_NODE node;
void *data = NULL;
if (stack->head != NULL)
{
node = stack->head;
data = node->data;
stack->head = node->next;
stack->count--;
free(node);
}
else
{
printf("\nstack is empty:pop\n\n");
}
return data;
}
void *stack_top(LINKED_STACK stack)
{
LINKED_STACK_NODE node;
void *data = NULL;
if (stack->head != NULL)
{
data = stack->head->data;
}
else
{
printf("\nstack is empty:top\n\n");
}
return data;
}
void solve_maze()
{
int M[8][8] = {
/* R\C 0 1 2 3 4 5 6 7 */
/* 0 */ {0, 0, 0, 1, 0, 0, 0, 0},
/* 1 */ {0, 1, 1, 1, 0, 0, 1, 0},
/* 2 */ {0, 1, 0, 1, 0, 0, 1, 0},
/* 3 */ {0, 1, 0, 1, 1, 1, 1, 0},
/* 4 */ {0, 1, 0, 0, 0, 0, 1, 1},
/* 5 */ {0, 1, 1, 0, 1, 1, 1, 0},
/* 6 */ {0, 0, 0, 0, 1, 0, 0, 0},
/* 7 */ {0, 0, 0, 0, 1, 0, 0, 0},
};
int I, J, R = 0, C = 3;
LINKED_STACK stack;
POS pos = (POS)malloc(sizeof(POS));
int flag;
stack = stack_init();
do
{
FİLL HERE FOR SOLVİNG MAZE ALGORİTHM
FİLL HERE
FİLL HERE
FİLL HERE
FİLL HERE
// TODO: Fill this block.
} while (R != 7 && C != 7 && R != 0 && C != 0);
}
int main()
{
solve_maze();
return 0;
}
Extracted text: While searching for a passageway from an entrance (R,C) to an exit, it is convenient to mark positions (I,J) already visited M [ I,J]=2. An algorithm can be designed around a stack of positions: o Push (R,C) and set M[R,C] to 2. The pair (R,C) is the current position. о repeat • Test the four positions adjacent to (R, C) (North, East, South, West). For a position (I,J) for which M [ I, J]=1, push (I,J) and set M[I,J] to 2. If no adjacent position is open, then delete (I,J) and set M [R,C] to -1 to indicate that the current position leads nowhere. Pop the stack. • (R,C) = TopValue in the stack. until (R, C) is a border position. o If the final (R,C) is the initial entrance pair, then the maze has no other exit because all branch-paths from all blocks accessible from the start block have been tried. Otherwise, the contents of the stack define a path from entrance to exit.