问个关于栈的问题

summerYe 2010-03-20 07:10:35
#include<stdio.h>
#include<stdlib.h>
struct stackNode
{
int x;
int y;
struct stackNode *next;
};
typedef struct stackNode stacklist;
typedef stacklist *link;
int path = NULL;//路径栈指针
link push(link stack,int x,int y)//数据入栈
{
link newNode;
newNode = (link) malloc(sizeof(stacklist));
if(!newNode)
{
printf("分配内存失败!");
return NULL;
}
newNode->x = x;
newNode->y = y;
newNode->next = stack;
stack = newNode;
return stack;
}
link pop(link stack,int *x,int *y)//出栈,即删掉栈顶
{
link top;
if(stack!= NULL)
{
top = stack;
stack = stack->next;//这行是否应该写到下面去,不然下面一行代码:*x =stack->x;变成了删掉栈顶的下一个结点?
*x = stack->x;//是否应该改成top->x?
*y = stack->y;
free(top);
return stack;
}
else
*x = -1;
}
int main()
{
int maze[7][10]=//迷宫最外面即数组最外一层全部为1表示已经是外面了0表示能穿过,1表示柱子不能走
{
1,1,1,1,1,1,1,1,1,1,
1,0,1,0,1,0,0,0,0,1,
1,0,1,0,1,0,1,1,0,1,
1,0,1,0,1,1,1,0,0,1,
1,0,1,0,0,0,0,0,1,1,
1,0,0,0,1,1,1,0,0,1,
1,1,1,1,1,1,1,1,1,1
};
int i,j;
int x = 5;
int y = 8;//迷宫出口为左下角a[1][1],入口为右下角a[5][8]
while ( x!=1||y!=1 )
{
maze[x][y] =2;//2表示走过的路
if(maze[x-1][y]<=0)//向上走
{
x = x-1;
path = push(path,x,y);//VC6.0系统说这里形参不配,为什么?
}
else
if( maze[x+1][y]<=0)//向下
{
x =x+1;
path = push(path,x,y);
}
else
if(maze[x][y-1]<=0)//向左
{
y = y-1;
path = push(path,x,y);
}
else
if(maze[x][y+1]<=0)//向右
{
y = y+1;
path = push(path,x,y);
}
else
{
maze[x][y] =3;//3表示绝路要回溯
path = pop(path,&x,&y);
}
}
maze[x][y] = 2;
printf("迷宫的路径如下图:\n");
for(i = 1;i<6;i++)
{
for(j=1;j<9;j++)
printf("%d",maze[i][j]);
printf("\n");
}
return 0;
}
问题在注释上,走路默认顺序是上下左右。数组矩阵0表示通,1阻。
还有两个个问题是当走到a[3][7]时,判断向上走不行,但又可以向下走?那岂不是又返回来,再又上去,再又下来的无限循环了?
a[2][5]的时候此时maze[2][5] = 3;表回溯。此时再怎么办呢,是不是将此结点删除然后返回a[2][5]?但再回到a[2][5]后此时怎么判断?还能不能又下到maze[2][5]?似乎不能,因为已经删掉了,但当判断if(a[x+1][5]怎么确定怎么办?

...全文
92 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
summerYe 2010-03-21
  • 打赏
  • 举报
回复
给自己顶个......来人帮...
  • 打赏
  • 举报
回复
楼主应该这样做,方向顺时针做好点。
summerYe 2010-03-20
  • 打赏
  • 举报
回复
帮下忙啊,各位,我这对不齐呀。一写到这自动变了 。真气人
jbz001 2010-03-20
  • 打赏
  • 举报
回复
我先帮你顶一顶,一会再看。
另外说明一下,把代码写整齐。
AlanBruce 2010-03-20
  • 打赏
  • 举报
回复

if(maze[x-1][y]<=0)//向上走
{
x = x-1;
path = push(path,x,y);//VC6.0系统说这里形参不配,为什么?
path在这里是整形,但是参数1需要stacklist*指针类型,你的NULL被强制转换为int 0了。


typedef stacklist *link;

}

summerYe 2010-03-20
  • 打赏
  • 举报
回复
这是个回溯问题,望各位帮忙看看。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧