#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_STACK_SIZE 1000
#define MAX_SIZE 6
typedef struct {
short r;
short c;
} element;
typedef struct {
element stack[ MAX_STACK_SIZE] ;
int top;
} StackType;
void init( StackType * s)
{
s-> top = - 1 ;
}
/**
* \brief return the true if its empty.
*/
bool is_empty( StackType * s)
{
if ( s-> top == - 1 ) {
return true ;
}
return false ;
}
/**
* \brief return the true if its full.
*/
bool is_full( StackType * s)
{
if ( s-> top == ( MAX_STACK_SIZE - 1 ) ) {
return true ;
}
return false ;
}
/**
* \brief push the element to the stack.
*/
void push( StackType * s, element item)
{
int ret;
ret = is_full( s) ;
if ( ret == true ) {
fprintf ( stderr
, "stack is full.\n " ) ; return ;
}
s-> top++;
s-> stack[ s-> top] = item;
}
/**
* \brief pop the element.
*/
element pop( StackType * s)
{
int ret;
element tmp_element;
ret = is_empty( s) ;
if ( ret == true ) {
fprintf ( stderr
, "stack is empty\n " ) ; }
tmp_element = s-> stack[ s-> top] ;
s-> top--;
return tmp_element;
}
element peek( StackType * s)
{
if ( is_empty( s) == 1 ) {
}
return s-> stack[ s-> top] ;
}
element here = { 1 , 0 } ; //here.r = 1, here.c = 0
element entry = { 1 , 0 } ; //end.r =1 end.c = 0
char maze[ MAX_SIZE] [ MAX_SIZE] = {
{ '1' , '1' , '1' , '1' , '1' , '1' } ,
{ 'e' , '0' , '1' , '0' , '0' , '1' } ,
{ '1' , '0' , '0' , '0' , '1' , '1' } ,
{ '1' , '0' , '1' , '0' , '1' , '1' } ,
{ '1' , '0' , '1' , '0' , '0' , 'x' } ,
{ '1' , '1' , '1' , '1' , '1' , '1' } ,
} ;
void push_loc( StackType * s, int r, int c)
{
if ( r < 0 || c < 0 ) {
return ;
}
if ( ( maze[ r] [ c] != '1' ) && ( maze[ r] [ c] != '.' ) ) {
element tmp;
tmp.r = r;
tmp.c = c;
push( s, tmp) ;
}
}
int main( ) {
int r, c;
StackType s;
init( & s) ;
here = entry;
while ( maze[ here.r ] [ here.c ] != 'x' ) {
r = here.r ;
c = here.c ;
maze[ r] [ c] = '.' ;
printf ( "Current location. r[%d], c[%d]\n " , r
, c
) ;
push_loc( & s, r - 1 , c) ;
push_loc( & s, r + 1 , c) ;
push_loc( & s, r, c - 1 ) ;
push_loc( & s, r, c + 1 ) ;
if ( is_empty( & s) ) {
return 1 ;
}
else {
here = pop( & s) ;
}
}
return 0 ;
}
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdGRib29sLmg+CgojZGVmaW5lIE1BWF9TVEFDS19TSVpFIDEwMDAKI2RlZmluZSBNQVhfU0laRSA2Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBzaG9ydCByOwogICAgc2hvcnQgYzsKfSBlbGVtZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgZWxlbWVudCBzdGFja1tNQVhfU1RBQ0tfU0laRV07CiAgICBpbnQgdG9wOwp9IFN0YWNrVHlwZTsKCnZvaWQgaW5pdChTdGFja1R5cGUgKnMpCnsKICAgIHMtPnRvcCA9IC0xOwp9CgovKioKICogXGJyaWVmIHJldHVybiB0aGUgdHJ1ZSBpZiBpdHMgZW1wdHkuCiAqLwpib29sIGlzX2VtcHR5KFN0YWNrVHlwZSAqcykKewogICAgaWYocy0+dG9wID09IC0xKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICAKICAgIHJldHVybiBmYWxzZTsKfQoKLyoqCiAqIFxicmllZiByZXR1cm4gdGhlIHRydWUgaWYgaXRzIGZ1bGwuCiAqLwpib29sIGlzX2Z1bGwoU3RhY2tUeXBlICpzKQp7CiAgICBpZihzLT50b3AgPT0gKE1BWF9TVEFDS19TSVpFIC0gMSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIAogICAgcmV0dXJuIGZhbHNlOwp9CgovKioKICogXGJyaWVmIHB1c2ggdGhlIGVsZW1lbnQgdG8gdGhlIHN0YWNrLgogKi8Kdm9pZCBwdXNoKFN0YWNrVHlwZSAqcywgZWxlbWVudCBpdGVtKQp7CiAgICBpbnQgcmV0OwogICAgCiAgICByZXQgPSBpc19mdWxsKHMpOwogICAgaWYocmV0ID09IHRydWUpIHsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInN0YWNrIGlzIGZ1bGwuXG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIHMtPnRvcCsrOwogICAgcy0+c3RhY2tbcy0+dG9wXSA9IGl0ZW07ICAgIAp9CgovKioKICogXGJyaWVmIHBvcCB0aGUgZWxlbWVudC4KICovCmVsZW1lbnQgcG9wKFN0YWNrVHlwZSAqcykKewogICAgaW50IHJldDsKICAgIGVsZW1lbnQgdG1wX2VsZW1lbnQ7CiAgICAKICAgIHJldCA9IGlzX2VtcHR5KHMpOwogICAgaWYocmV0ID09IHRydWUpIHsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInN0YWNrIGlzIGVtcHR5XG4iKTsKICAgICAgICBleGl0KDEpOwogICAgfQogICAgCiAgICB0bXBfZWxlbWVudCA9IHMtPnN0YWNrW3MtPnRvcF07CiAgICBzLT50b3AtLTsKCiAgICByZXR1cm4gdG1wX2VsZW1lbnQ7Cn0KCmVsZW1lbnQgcGVlayhTdGFja1R5cGUgKnMpCnsKICAgIGlmIChpc19lbXB0eShzKSA9PSAxKSB7CiAgICAgICAgZnByaW50ZihzdGRlcnIsICJzdGFjayBpcyBlbXB0eSIpOwogICAgICAgIGV4aXQoMSk7CiAgICB9CiAgICAKICAgIHJldHVybiBzLT5zdGFja1tzLT50b3BdOwp9CgplbGVtZW50IGhlcmUgPSB7IDEsMCB9OyAvL2hlcmUuciA9IDEsIGhlcmUuYyA9IDAKZWxlbWVudCBlbnRyeSA9IHsgMSwwIH07IC8vZW5kLnIgPTEgZW5kLmMgPSAwCmNoYXIgbWF6ZVtNQVhfU0laRV1bTUFYX1NJWkVdID0gewogeycxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMSd9LAogeydlJywgJzAnLCAnMScsICcwJywgJzAnLCAnMSd9LAogeycxJywgJzAnLCAnMCcsICcwJywgJzEnLCAnMSd9LAogeycxJywgJzAnLCAnMScsICcwJywgJzEnLCAnMSd9LAogeycxJywgJzAnLCAnMScsICcwJywgJzAnLCAneCd9LAogeycxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMSd9LAp9OwoKdm9pZCBwdXNoX2xvYyhTdGFja1R5cGUgKnMsIGludCByLCBpbnQgYykKewogICAgaWYgKHIgPCAwIHx8IGMgPCAwKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICBpZiAoKG1hemVbcl1bY10gIT0gJzEnKSAmJiAobWF6ZVtyXVtjXSAhPSAnLicpKSB7CiAgICAgICAgZWxlbWVudCB0bXA7CiAgICAgICAgdG1wLnIgPSByOwogICAgICAgIHRtcC5jID0gYzsKICAgICAgICBwdXNoKHMsIHRtcCk7CiAgICB9Cn0KCmludCBtYWluKCl7CiAgICBpbnQgciwgYzsKICAgIFN0YWNrVHlwZSBzOwogICAgCiAgICBpbml0KCZzKTsKICAgIGhlcmUgPSBlbnRyeTsKCiAgICB3aGlsZShtYXplW2hlcmUucl1baGVyZS5jXSAhPSAneCcpIHsKICAgICAgICByID0gaGVyZS5yOwogICAgICAgIGMgPSBoZXJlLmM7CiAgICAgICAgCiAgICAgICAgbWF6ZVtyXVtjXSA9ICcuJzsKICAgICAgICBwcmludGYoIkN1cnJlbnQgbG9jYXRpb24uIHJbJWRdLCBjWyVkXVxuIiwgciwgYyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgcHVzaF9sb2MoJnMsIHIgLSAxLCBjKTsKCiAgICAgICAgcHVzaF9sb2MoJnMsIHIgKyAxLCBjKTsKCiAgICAgICAgcHVzaF9sb2MoJnMsIHIsIGMgLSAxKTsKCiAgICAgICAgcHVzaF9sb2MoJnMsIHIsIGMgKyAxKTsKCiAgICAgICAgCiAgICAgICAgaWYgKGlzX2VtcHR5KCZzKSkgewogICAgICAgICAgICBwcmludGYoIm5vdCBleGl0biIpOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGhlcmUgPSBwb3AoJnMpOwogICAgICAgIH0KICAgIH0KICAgIHByaW50Zigic3VjY2VzcyIpOwogICAgIAogICAgcmV0dXJuIDA7Cn0KCg==