天天看點

c語言建立一個二維數組迷宮,c語言寫的迷宮問題

該樓層疑似違規已被系統折疊 隐藏此樓檢視此樓

下面是程式

#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

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)