1 #include <stdlib.h>
2 #include <stdio.h>
3
4 #define stackinitsize 50
5 #define stackincrement 8
6
7 typedef struct {
8 int x,y;
9 }posttype;
10
11 typedef struct {
12 int ord;
13 posttype seat;
14 int di;
15 }elemtype;
16
17 typedef struct{
18 elemtype *base;
19 elemtype *top;
20 int stacksize;
21 }sqstack;
22
23
24 int initstack(sqstack &s)
25 {s.base=(elemtype * ) malloc(stackinitsize*sizeof(elemtype));
26 s.top=s.base;
27 s.stacksize=stackinitsize;
28 return 1;
29 }
30
31 int push(sqstack &s,elemtype e)
32 {
33 (*(s.top)).ord=e.ord;
34 (*(s.top)).seat.x=e.seat.x;
35 (*(s.top)).seat.y=e.seat.y;
36 (*(s.top)).di=e.di;
37 s.top++;
38 return 1;
39 }
40
41 //elemtype gettop(sqstack s)
42 //{
43 // return *(s.top-1);
44 // }
45
46 int emptystack(sqstack s)
47 {if (s.top==s.base) return 1;
48 else return 0;
49 }
50
51 int pop(sqstack &s,elemtype &e)
52 { if (emptystack(s)) return 0;
53 --s.top;
54 e.ord=(*(s.top)).ord;
55 e.seat.x=(*(s.top)).seat.x;
56 e.seat.y=(*(s.top)).seat.y;
57 e.di=(*(s.top)).di;
58 return 1;
59 }
#include <stdio.h>
# include "d:\maze\mystack.h"
#define TRUE 1
#define FALSE 0
int a[10][10]={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};
typedef int Status;
Status pass(posttype curpos)
{
if (a[curpos.x][curpos.y]==0)
return 1;
else
return 0;
}
Status mazepath(int maze[10][10],posttype start,posttype end,sqstack &s)
{
int curstep;
posttype curpos;
elemtype e;
initstack(s);
curpos.x=start.x;curpos.y=start.y;
curstep=1;
do{
if(pass(curpos))
{
// footprint(curpos);//stroe foot
e.ord=curstep;
e.seat.x=curpos.x;
e.seat.y=curpos.y;
e.di=1;
push(s,e);
if(curpos.x==end.x && curpos.y==end.y) return(TRUE);
curpos.y=curpos.y+1;//east near
curstep++;
}
else
{
if(!emptystack(s))
{
pop(s,e);
while(e.di==4 && !emptystack(s))
{
// markprint(s.seat);//outprint reverse
pop(s,e);
}//end while
if(e.di<4)
{
e.di++;push(s,e);
switch(e.di)
{
case 1:curpos.y=curpos.y+1;break;
case 2:curpos.x=curpos.x+1;break;
case 3:curpos.y=curpos.y-1;break;
case 4:curpos.x=curpos.x-1;break;
}
}//if(di<4)
}//if(!emptystack(s))
}//else
}while(!emptystack(s));
return FALSE;
}
void outputstak(sqstack s)
{
elemtype e;
while(!emptystack(s))
{
pop(s,e);
printf("%d (%d,%d) %d\n",e.ord,e.seat.x,e.seat.y,e.di);
}
}
main()
{
posttype start,end;
start.x=1;start.y=1;
end.x=8;end.y=8;
sqstack s1;
if(mazepath(a,start,end,s1)==TRUE)
outputstak(s1);
else
printf("\nno path....");
}