该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
下面是程序
#include
#define OVERFLOW -2
#define ERROR 0
#define NULL 0
#define true 1
#define TRUE 1
#define false 0
#define FALSE 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#include
#include
/*
初始化迷宫,1表示通道,0表示墙
*/
typedef struct MStackElem
{
int x;
int y;
int val;
}MStackElem;
typedef struct {
MStackElem * base;
MStackElem * top;
int stackSize;
}MStack;
void initStack(MStack *s) {
s->base = (MStackElem *)malloc(STACK_INIT_SIZE * sizeof(MStackElem));
if (!s->base) {
printf("in initStack()...Failed to initalize the MStack ,no enough space! exit now. ");
exit(OVERFLOW);
}
s->top = s->base;
s->stackSize = STACK_INIT_SIZE;
}
void push(MStack *s,MStackElem e) {
if (s->top - s->base >= s->stackSize) {
s->base = (MStackElem *)realloc(s->base, (STACK_INIT_SIZE+STACKINCREMENT) * sizeof(MStackElem));
if (!s->base) {
printf("in push()...Failed to realloc the MStack ,no enough space! exit now. ");
exit(OVERFLOW);
}
s->top = s->base + s->stackSize;
s->stackSize += STACKINCREMENT;
}
*(s->top++) = e;
}
MStackElem getTop(MStack *s) {
if (s->top == s->base) {
printf("in getTop(),empty stack! exit now. ");
exit(ERROR);
}
else {
return *(s->top - 1);
}
}
void pop(MStack *s) {
if (s->top == s->base) {
printf("in pop(),empty stack! exit now. ");
exit(ERROR);
}
else {
--(s->top);
}
}
MStack realPath,path;
int unPass(MStack path,MStackElem cur) {
int flag = 1;
while(path.top != path.base)
{
MStackElem e = *(path.top - 1);
if (e.x == cur.x&& e.y == cur.y)