| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 553 人关注过本帖
标题:迷宫还是搞不懂,比如。。。。。。。。
取消只看楼主 加入收藏
LKZ
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-4-22
结帖率:100%
收藏
已结贴  问题点数:16 回复次数:3 
迷宫还是搞不懂,比如。。。。。。。。
#include"stdio.h"#include"malloc.h"#include"stdlib.h"
typedef struct{int x,y;int ord;int der;}ElemType;
typedef struct{ElemType *base;ElemType *top;int stacksize;}Sqstack;
void InitStack(Sqstack &S);void Push(Sqstack &S, ElemType e);int Pop(Sqstack &S,ElemType &e);void NextPos(int *x, int *y, int der);
void InitStack(Sqstack &S){S.base=(ElemType*)malloc(sizeof(ElemType)*INIT_SIZE);if(!S.base) exit(1);S.top=S.base;S.stacksize=INIT_SIZE;}
void Push(Sqstack &S, ElemType e){if(S.top-S.base==S.stacksize){S.base=(ElemType*)malloc(sizeof(ElemType)*(INIT_SIZE+INCREMENT));S.top=S.base+S.stacksize;S.stacksize+=INCREMENT;}*(S.top++)=e;}
int Pop(Sqstack &S,ElemType &e){if(S.top==S.base) return 0;e=*(--S.top);return 1;}
void NextPos(int *x, int *y, int der){switch(der){case 1:++(*x);break;case 2:++(*y);break;case 3:--(*x);break;case 4:--(*y);break;default:break;
}}
int main(){Sqstack S;int x,y,step;ElemType e,*P;char maze[10][10]={{'#',' ','#','#','#','#','#','#','#','#'},{'#',' ',' ','#',' ',' ',' ','#',' ','#'},{'#',' ',' ','#',' ',' ',' ','#',' ','#'},{'#',' ',' ',' ',' ','#','#',' ',' ','#'},{'#',' ','#','#','#',' ',' ',' ',' ','#'},{'#',' ',' ',' ','#',' ',' ',' ',' ','#'},{'#',' ','#',' ',' ',' ','#',' ',' ','#'},{'#',' ','#','#','#',' ','#','#',' ','#'},{'#','#',' ',' ',' ',' ',' ',' ',' ','#'},{'#','#','#','#','#','#','#','#',' ','#'},
};
printf("The needed found maze are as follows:\n\n");for(x=0;x<10;x++){for(y=0;y<10;y++)printf("%c",maze[x][y]);printf("\n");}InitStack(S);P=S.base;x=0; y=1;step=1;do{if(maze[x][y]==' '){maze[x][y]='1';e.x=x;e.y=y;e.ord=step;e.der=1;
Push(S,e);if(x==9&&y==8) break;NextPos(&x,&y,1);step++;}else{if(S.base!=S.top){Pop(S,e);while(e.der==4){maze[e.x][e.y]='@';Pop(S, e);}}
if(e.der<4){e.der++;Push(S, e);x=e.x;y=e.y;NextPos(&x, &y, e.der);}}} while(S.top!=S.base);
printf("\n找到路径: 用1表示走的路,@表走的死路,#表墙: \n\n");for(x=0;x<10;x++){ for(y=0;y<10;y++)printf("%c",maze[x][y]);printf("\n");}printf("坐标表示如下:\n\n");
while(S.base!=S.top){if(P==S.base){printf("(%d,%d)", (*S.base).x, (*S.base).y);S.base++;}else{printf(" -> (%d,%d)", (*S.base).x, (*S.base).y);S.base++;}}printf("\n");
free(P);return 0;
上面划横线的地方不是很懂么1,为什么e.di==4时能判断那是死路?
                          2,P指针起什么作用?

搜索更多相关主题的帖子: include 
2011-04-28 09:12
LKZ
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-4-22
收藏
得分:0 
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"

typedef struct
{
int x,y;
int ord;
int der;

}ElemType;

typedef struct
{
ElemType *base;
ElemType *top;
int stacksize;
}Sqstack;

void InitStack(Sqstack &S);
void Push(Sqstack &S, ElemType e);
int Pop(Sqstack &S,ElemType &e);
void NextPos(int *x, int *y, int der);


void InitStack(Sqstack &S)
{
S.base=(ElemType*)malloc(sizeof(ElemType)*INIT_SIZE);
if(!S.base) exit(1);
S.top=S.base;
S.stacksize=INIT_SIZE;
}

void Push(Sqstack &S, ElemType e)
{
if(S.top-S.base==S.stacksize)
{
S.base=(ElemType*)malloc(sizeof(ElemType)*(INIT_SIZE+INCREMENT));
S.top=S.base+S.stacksize;
S.stacksize+=INCREMENT;
}

*(S.top++)=e;
}

int Pop(Sqstack &S,ElemType &e)
{
if(S.top==S.base) return 0;
e=*(--S.top);

return 1;
}

void NextPos(int *x, int *y, int der)
{
switch(der)
{
case 1:
++(*x);
break;
case 2:
++(*y);
break;
case 3:
--(*x);
break;
case 4:
--(*y);
break;
default:
break;

}
}


int main()
{
Sqstack S;
int x,y,step;

ElemType e,*P;
char maze[10][10]=
{
{'#',' ','#','#','#','#','#','#','#','#'},
{'#',' ',' ','#',' ',' ',' ','#',' ','#'},
{'#',' ',' ','#',' ',' ',' ','#',' ','#'},
{'#',' ',' ',' ',' ','#','#',' ',' ','#'},
{'#',' ','#','#','#',' ',' ',' ',' ','#'},
{'#',' ',' ',' ','#',' ',' ',' ',' ','#'},
{'#',' ','#',' ',' ',' ','#',' ',' ','#'},
{'#',' ','#','#','#',' ','#','#',' ','#'},
{'#','#',' ',' ',' ',' ',' ',' ',' ','#'},
{'#','#','#','#','#','#','#','#',' ','#'},

};


printf("The needed found maze are as follows:\n\n");
for(x=0;x<10;x++)
{
for(y=0;y<10;y++)
printf("%c",maze[x][y]);
printf("\n");
}

InitStack(S);
P=S.base;
x=0; y=1;
step=1;
do
{
if(maze[x][y]==' ')
{
maze[x][y]='1';
e.x=x;
e.y=y;
e.ord=step;
e.der=1;

Push(S,e);
if(x==9&&y==8) break;
NextPos(&x,&y,1);
step++;

}
else
{
if(S.base!=S.top)
{
Pop(S,e);
while(e.der==4)
{
maze[e.x][e.y]='@';
Pop(S, e);
}
}


if(e.der<4)
{
e.der++;
Push(S, e);
x=e.x;
y=e.y;
NextPos(&x, &y, e.der);
}
}



} while(S.top!=S.base);

printf("\n找到路径: 用1表示走的路,@表走的死路,#表墙: \n\n");
for(x=0;x<10;x++)
{ for(y=0;y<10;y++)
printf("%c",maze[x][y]);
printf("\n");
}
printf("坐标表示如下:\n\n");

while(S.base!=S.top)
{
if(P==S.base)
{
printf("(%d,%d)", (*S.base).x, (*S.base).y);
S.base++;
}
else
{
printf(" -> (%d,%d)", (*S.base).x, (*S.base).y);
S.base++;
}

}
printf("\n");


free(P);
return 0;
}
1,为什么e.der==4时能判断那是死路?
 2,P指针起什么作用?
哈哈哈,终于看到版主了。版主,你好,小的这里有礼了。


2011-04-28 22:23
LKZ
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-4-22
收藏
得分:0 
对于第一点,还是有疑问,如果e.der==2,再要用相同的方法判断,是不是也是到e.der==4就结束了呢?那这样e.der==1岂不是没有判断?
2011-04-29 18:48
LKZ
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-4-22
收藏
得分:0 
明白了  感谢编程论坛,感谢三月的雪。
2011-04-29 22:19
快速回复:迷宫还是搞不懂,比如。。。。。。。。
数据加载中...
 
   



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

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