队列走迷宫,为啥没结果?

cmx 2005-11-03 12:24:51
测试迷宫
0000
1101
1101
1100
为什么输入迷宫后程序似乎进入死循环?请高手解答为谢!
调试环境:tc2.01,djgpp


#include<stdio.h>
#define m 4
#define n 4
int mg[m+1][n+1];
struct mgque
{
int x,y,pre;
}mgque[25];/*队列:用来存路径*/
struct zl
{
int x,y;
}zl[5];/*四个方向的增量*/
int mglj()
{
int x,y,i=1,j=1,d,find;/*d是用来循环的增量*/
int rear=0,front=0;
mgque[0].x=1;mgque[0].y=1;mgque[0].pre=0;
mg[1][1]=-1;/*迷宫左上第一个,若为0可通,标志为-1防止重复*/
find=0;
while(front<=rear&&!find)
{
x=mgque[front].x;y=mgque[front].y;
for(d=1;d<=4;i++)
{
i=x+zl[d].x;
j=y+zl[d].y;
if(mg[i][j]==0)
{
rear++;
mgque[rear].x=i;
mgque[rear].y=j;
mgque[rear].pre=front;
mg[i][j]=-1;
}
if((i==m)&&(j==n))
{
find=1;
outlj(mgque,rear);
return 1;
}
}/*如果方向上的值为0表示可以通,入队,保存队列静态下标pre*/
front++;
}
printf("no way!");
return 0;
}
int outlj(struct mgque mgque[],int rear)
{ int i;
i=rear;
do{
printf("(%d,%d)",mgque[i].x,mgque[i].y);
i=mgque[i].pre;
}while(i!=0);
}/*输出用rear反方向输出*/


int main()
{
int i,j;
/*下面初始化迷宫*/
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf("%d",&mg[i][j]);
for(i=0;i<=m+1;i++)
{ mg[i][0]=1;
mg[i][n+1]=1;
}
for(j=0;j<=n+1;j++)
{
mg[0][j]=1;
mg[m+1][j]=1;
}
for(i=0;i<=m+1;i++)
for(j=0;j<=n+1;j++)
{
printf("%2d",mg[i][j]);
if(j==(n+1))printf("\n");
} /*用来测试输入迷宫*/
zl[1].x=0;zl[1].y=-1;
zl[2].x=-1;zl[2].y=0;
zl[3].x=0;zl[3].y=1;
zl[3].x=1;zl[3].y=0;/*四个方向上增量*/
mglj();

}
...全文
112 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cmx 2005-11-03
  • 打赏
  • 举报
回复
谢谢2位。已经解决。有空今天给分了!:)
mmmcd 2005-11-03
  • 打赏
  • 举报
回复
int main()
{
...
zl[1].x=0;zl[1].y=-1;
zl[2].x=-1;zl[2].y=0;
zl[3].x=0;zl[3].y=1;
zl[3].x=1;zl[3].y=0;/*四个方向上增量*////zl[4].x=1;zl[4].y=0;????
mglj();

}
mmmcd 2005-11-03
  • 打赏
  • 举报
回复
int mglj()
{
...
while(front<=rear&&!find)
{
x=mgque[front].x;y=mgque[front].y;
for(d=1;d<=4;i++)
{
i=x+zl[d].x;
j=y+zl[d].y;
//没判断i,j是否出界?if(i>=0 && i<4 && j>=0 && j<4)
if(mg[i][j]==0)
{
...
}
...
}

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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