| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 751 人关注过本帖
标题:哪位大哥帮小弟找找问题出在哪!谢谢啦
取消只看楼主 加入收藏
gyk881206
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-6-29
收藏
 问题点数:0 回复次数:0 
哪位大哥帮小弟找找问题出在哪!谢谢啦
#include<stdio.h>
#include<stdlib.h>
#define M 8 //自己规定为8*8的迷宫
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define STACK_INIT_SIZE 64
#define STACKINCREMENT 8
int findway(int);
int NextStep(int *, int *, int );
typedef struct
{
int x, y;  //坐标
int dir;  //方向
}ElemType;
typedef struct StackNode//构造栈
{
ElemType *base;
ElemType *top;
int stacksize;
}SqStack;

int InitStack(SqStack *S)//初始化栈
{
S->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!S->base)
{
printf("memory allocation failed,goodbye");
exit(1);
}
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
return OK;
}
int Push(SqStack *S,ElemType e)//进栈操作
{
if(S->top-S->base>=S->stacksize)
{
S->base = (ElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(ElemType));
if (!S->base)
{
printf("memory allocation failed,goodbye");
exit(1);
}
S->top = S->base+S->stacksize;
S->stacksize += STACKINCREMENT;
}
*S->top++=e;
return OK;
}

int Pop(SqStack *S,ElemType *e)//出栈操作
{
if(S->top==S->base)
{
return ERROR;
}
*e=*--S->top;
//printf("%d\n",e);
return OK;
}

int StackEmpty(SqStack *S)//判断栈是否为空
{
if(S->top==S->base)
return OK;
else
return ERROR;
}
void Input(char b[M][M])//输入时候请注意把一圈都输入为墙即'#'
{

int i, j;

printf("请输入迷宫形状:\n");

for (i = 0; i < M; i++)
{
for (j = 0; j < M; j++)
{
scanf("%c",&b[i][j]);
}
getchar();//吃掉内存中的残留换行符号
}
}
void Ouput(const char b[M][M])
{
int i, j;


printf("迷宫的形状为:\n");
for (i = 0; i < M; i++)
{
for (j = 0; j < M; j++)
{
printf("%c",b[i][j]);
}
printf("\n");
}
}
int FindWay(char maze[M][M])
{
ElemType  e;
int constep = 1;
int x = 1, y = 1;
SqStack S;

InitStack(&S);
do
{
if (maze[x][y] == ' ')//当第3次时 maze[x][y]!=' ' 照样通不过
{
maze[x][y] = '1';
e.x = x;
e.y = y;
e.dir = 1;
Push(&S,e);
if (x == M && y == M)
{
printf("存在出口\n");
return 1;
}
NextStep(&x,&y,1);
constep++;
}

else
{
Pop(&S,&e);
while (e.dir == 4 && !StackEmpty(&S))
{
maze[e.x][e.y] = '0';
Pop(&S,&e);
}

{

if (e.dir < 4)
{
e.dir++;
Push(&S,e);
x = e.x;
y = e.y;
NextStep(&x, &y, e.dir);
}
else
{
printf("没有出口\n");
return 0;
}
}
}
}while(S.top!=S.base);

return 0;
}

int NextStep(int *x, int *y, int dir)
{

switch(dir)
{
case 1:
(*y)++;
break;
case 2:
(*x)++;
break;
case 3:
(*y)--;
break;
case 4:
(*x)--;
break;
default:
break;
}
return 0;
}

int main(void)
{
char a[M][M];

Input(a);
Ouput(a);
FindWay(a);
Ouput(a);

system("pause");
return 0;
}
搜索更多相关主题的帖子: int define ElemType STACK 
2008-06-29 15:14
快速回复:哪位大哥帮小弟找找问题出在哪!谢谢啦
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016710 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved