²é¿´: 299  |  »Ø¸´: 0
µ±Ç°Ö÷ÌâÒѾ­´æµµ¡£

zhliye

гæ (³õÈëÎÄ̳)

[½»Á÷] ¡¾ÇóÖú¡¿ÇóÖú¸ßÊÖ£¨Ö¸Õ룬ջ£©µÄÎÊÌ⣬Ôõô×ÜÒç³ö°¡£¿£¿£¿

ÓÃջʵÏÖµÄÒ»¸öÃÔ¹¬Ëã·¨£¬µ«ÊÇÖ´Ðгö´í£¬×Ô¼ºÃ»¿´³öÊÇɶÎÊÌ⣬ÔÎÁË£¬Çë´ó¼Ò°ïæָÕý¡£
#include
#include
#include

#define OK 1
#define STACKINITSIZE 100
#define STACKINCREMENT 50
#define OVERFLOW -2
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 10

//maze`s MAP ;'O' means can pass and '1' means here is blocked.
int Maze[MAXSIZE][MAXSIZE]={
       {1,1,1,1,1,1,1,1,1,1},
       {1,0,0,1,0,0,0,1,0,1},
       {1,0,0,1,0,0,0,1,0,1},
       {1,0,0,0,0,1,1,0,0,1},
       {1,0,1,1,1,0,0,0,0,1},
       {1,0,0,0,1,0,0,0,0,1},
       {1,0,1,0,0,0,1,0,0,1},
       {1,0,1,1,1,0,1,1,0,1},
       {1,1,0,0,0,0,0,0,0,1},
       {1,1,1,1,1,1,1,1,1,1},
  };

//dirArray ,from east->south->west->north,the coordinate increment
int Dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};

//PosType is way`s coordinate
typedef struct{
   int x;
   int y;
}PosType;

//current position whther can pass
int Pass(PosType curpos){
    if(Maze[curpos.x][curpos.y]==0) return OK;
    return ERROR;
}

//if this position can pass ,footprint
void FootPrint(PosType curpos){
     Maze[curpos.x][curpos.y]=2;
}

//if can't pass ,marking
void MarkPrint(PosType curpos){
     Maze[curpos.x][curpos.y]=4;
}

//seek the next position
PosType NextPos(PosType curpos,int dir){
   curpos.x=curpos.x+Dir[dir][0];
   curpos.y=curpos.y+Dir[dir][1];
   return curpos;
  }

//MazeType is stack`s element type
typedef struct{
int ord;
PosType seat;
int  di;
}MazeType;

//stack node
typedef struct
{
MazeType *base;
MazeType *top;
int stacksize;
}SqStack,*pStack;

//init stack
int InitStack (pStack S)
{
  S->base=(MazeType *)malloc(STACKINITSIZE * sizeof(MazeType));
  if(!S->base) exit(OVERFLOW);
   printf("init is succeed";
  S->stacksize=STACKINITSIZE;
  S->top=S->base;
return OK;
}

//Push Stack
int PushStack(pStack S,MazeType e){
if((S->top-S->base) >= S->stacksize)
    {
     S->base=(MazeType *)realloc(S->base,(S->stacksize+STACKINCREMENT) * sizeof(MazeType));
     if(!S->base) {printf("stack is full and reseting fails";exit(OVERFLOW);}
      S->top=S->base+S->stacksize;
      S->stacksize+=STACKINCREMENT;
    }
    *S->top++=e;
return OK;
}

//pop stack
int PopStack(pStack S,MazeType *q){
if(S->top==S->base) return ERROR;
  *q = *--S->top;
return OK;
}

//judge whther stack is empty
int  EmptyStack(pStack S){
    if(S->top==S->base) return OK;
    return ERROR;
}
//destroy stack
void DestroyStack(pStack S){
   S->top=S->base;
   free(S->base);
}
//above are stack`s base operation

//seek the mazepath
int   Mazepath(pStack S,PosType start,PosType end){
  PosType curpos=start;

  int curstep=1,dir=0;//dir is from 0 to3 coorespodence  east,south,west,north
  MazeType elem,pelem;

do{
     if(Pass(curpos)){
         FootPrint(curpos);
         elem.ord=curstep,elem.seat=curpos,elem.di=dir;
        if(PushStack(S,elem)) printf("push1 is wrong";
     if(curpos.x==end.x&&curpos.y==end.y) return TRUE;
     curpos=NextPos(curpos,elem.di);
     curstep++;
     }//if
    else{
        if(!EmptyStack(S)){
                  if( !PopStack(S,&pelem)) {printf("pop1 stack failing";exit(OVERFLOW);}//PopStack
                    while(!EmptyStack(S)&&pelem.di==3){
                        MarkPrint(pelem.seat);
                      if(!PopStack(S,&pelem)) printf("pop2 wrong";
                     }//while
              if(pelem.di<3){
                   pelem.di++;
                if(!PushStack(S,pelem)) printf("push2 is wrong";
                   curpos=NextPos(pelem.seat,pelem.di);
               }//if
        }//if
     }//else
  }while(!EmptyStack(S));
   return   FALSE;
}


main(){
        PosType  start,end,tests;
           start.x=1,start.y=1,end.x=8,end.y=8;
        SqStack test;
         MazeType elem,element;
         int i,j;
         printf("The Maze is; \n";
        for(i=0;i
          for(j=0;j
                printf("%d  ",Maze[j]);if(j==9) printf("\n";
            }
printf("%d",&test);
        if(Mazepath(&test,start,end)) printf("This maze has no exit!";
       printf("%d",&test);
    while(!EmptyStack(&test)){
           if(!PopStack(&test,&elem)) printf("mappath print fail";
           printf("%d->",elem.ord);
           printf("(%d,%d)->",elem.seat.x,elem.seat.y);
     }//while*/
DestroyStack(&test);
}


´Ë³ÌÐòÔËÐÐ*£¨GCC£©ºó³öÏÖÈçϵĴíÎó£¬Çë¸ßÊÖÖ¸µã

*** glibc detected *** ./a.out: realloc(): invalid pointer: 0xbff98759 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(realloc+0x39c)[0xb7e199ec]
/lib/tls/i686/cmov/libc.so.6(realloc+0x3c)[0xb7e1968c]
./a.out[0x80485f9]
./a.out[0x80487a0]
./a.out[0x80489f1]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe0)[0xb7dc0450]
./a.out[0x8048441]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:01 461093     /home/lgp/C/a.out
08049000-0804a000 rw-p 00000000 08:01 461093     /home/lgp/C/a.out
0804a000-0806b000 rw-p 0804a000 00:00 0          [heap]
b7da9000-b7daa000 rw-p b7da9000 00:00 0
b7daa000-b7ef3000 r-xp 00000000 08:01 712708     /lib/tls/i686/cmov/libc-2.7.so
b7ef3000-b7ef4000 r--p 00149000 08:01 712708     /lib/tls/i686/cmov/libc-2.7.so
b7ef4000-b7ef6000 rw-p 0014a000 08:01 712708     /lib/tls/i686/cmov/libc-2.7.so
b7ef6000-b7ef9000 rw-p b7ef6000 00:00 0
b7ef9000-b7f03000 r-xp 00000000 08:01 696339     /lib/libgcc_s.so.1
b7f03000-b7f04000 rw-p 0000a000 08:01 696339     /lib/libgcc_s.so.1
b7f04000-b7f07000 rw-p b7f04000 00:00 0
b7f07000-b7f08000 r-xp b7f07000 00:00 0          [vdso]
b7f08000-b7f22000 r-xp 00000000 08:01 696332     /lib/ld-2.7.so
b7f22000-b7f24000 rw-p 00019000 08:01 696332     /lib/ld-2.7.so
bff84000-bff99000 rw-p bffeb000 00:00 0          [stack]
-1074166568Aborted
»Ø¸´´ËÂ¥
ÎÒÒª³ÔÇà²Ë¡£
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ zhliye µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[»ù½ðÉêÇë] 5¸ö%2F£¬·Ç¹Ì¶¨¶Î22¸ö×Öĸ +8 jaasxulu 2026-07-15 9/450 2026-07-18 17:40 by dxcgbm
[»ù½ðÉêÇë] ÃæÉϵÄË®ºÜÉî +10 ²¼²¼ºÍÒ»¶þ 2026-07-18 15/750 2026-07-18 17:07 by 6543yes
[»ù½ðÉêÇë] ¹úÉç¿ÆÍ¨Ñ¶ÆÀÉó +3 DZˮ¹Ú¾ü123 2026-07-18 4/200 2026-07-18 16:29 by ×î°®±à×ë´Çµä
[»ù½ðÉêÇë] ÉúÃü¿ÚC13ÃæÉÏ»áÆÀʱ¼ä +7 luckinging 2026-07-14 11/550 2026-07-17 20:43 by ³æ²·1988
[½Ìʦ֮¼Ò] ÄÚÐÄØÑ·¦ +16 Ë®±ùÔÂÔÂÒ°Íà 2026-07-12 16/800 2026-07-17 19:25 by otani
[»ù½ðÉêÇë] ÉúÃü¿ÚÃæÉÏ»áÆÀ½áÊøÁËÂð´ó¼ÒÓÐÖªµÀ½á¹ûÂð£¿ÏÖÔÚ»¹Ã»Óнá¹ûÕý³£²»£¿ +6 ±ÌË®00 2026-07-16 9/450 2026-07-17 15:21 by jaasxulu
[ÂÛÎÄͶ¸å] ͶӢÎÄÆÚ¿¯ÈçºÎ²éÖØ 10+5 ²»ÖªµÀȡʲôÃû× 2026-07-15 6/300 2026-07-17 09:07 by bobvan
[»ù½ðÉêÇë] ²»ÒªÔÙÊý¹ú×ÔÈ»ÉêÇëÊéµÄ filecode µÄ·Ö¸ô·û¸öÊýÁË +14 sadpencil 2026-07-12 21/1050 2026-07-17 00:15 by wangze12014
[Óлú½»Á÷] ²®°·Éϼ׻ùÇóÖú 100+4 002tmumu 2026-07-14 7/350 2026-07-16 19:47 by 002tmumu
[ÂÛÎÄͶ¸å] ¿ç³ö°æÉçÉÌͶ¸å 20+5 ÄߺÃ520 2026-07-13 5/250 2026-07-16 17:24 by ÎÞÊÓ¾üÍÅ
[»ù½ðÉêÇë] ÉúÉúÃüѧ²¿»áÆÀ +4 wuke100666 2026-07-15 4/200 2026-07-16 00:12 by À²À²Ð¡ÄÝ×Ó
[»ù½ðÉêÇë] H¿Ú£¬ÃæÉÏ£¬Ê±¼ä´Á7ÔÂ7ÈÕ¡£ +3 plumage5 2026-07-15 3/150 2026-07-15 21:06 by 6543yes
[»ù½ðÉêÇë] Сľ³æÃ»ÂäÁË£¬³ýÁËÆíµ»Ìû×Ó£¬¼¸ºõ¿´²»µ½ÓмÛÖµµÄÌû×Ó +13 botar 2026-07-14 14/700 2026-07-15 19:28 by º®Á÷32
[»ù½ðÉêÇë] »áÆÀ +5 ÎÞÃûÕßµÇɽ 2026-07-15 5/250 2026-07-15 18:15 by ¸Ü¾ÍÊÇÄã¶Ô
[»ù½ðÉêÇë] E¿Ú»áÆÀ +11 ²¼²¼ºÍÒ»¶þ 2026-07-13 13/650 2026-07-15 16:34 by Kittylucky
[»ù½ðÉêÇë] E¿ÚÇàC»áÆÀ½áÊøÁËÂ𣿠40+3 ССÊ鳿c 2026-07-14 9/450 2026-07-15 16:04 by °²¾²µÄÖªÁË
[ÂÛÎÄͶ¸å] ũҵ»úеѧ±¨Í¶¸åÖÜÆÚ +3 G0DLIN 2026-07-14 7/350 2026-07-15 09:26 by xs74101122
[»ù½ðÉêÇë] ¹ú×ÔÈ»ÃæÉÏD¿ÚÆíµ» +4 monkeynana 2026-07-14 4/200 2026-07-15 09:14 by °×Ë®Öó
[»ù½ðÉêÇë] ûÊÕµ½ÏûÏ¢£¬ÔÙ´ÎÅãÅÜ +3 Ìì¿ÕÐdz½fly 2026-07-14 3/150 2026-07-14 19:14 by 6543yes
[»ù½ðÉêÇë] Ã÷ÌìE¿ÚÃæÉÏ»áÆÀ +8 ²¼²¼ºÍÒ»¶þ 2026-07-12 9/450 2026-07-13 22:59 by QTSorange
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û