我编的迷宫程序,编译连接都没有错误,运行的时候得到死循环,求教?谢谢大家了!

浮生如梦VIP 2011-11-20 08:50:27
#include <stdio.h>
#include <malloc.h>
#define M 6
#define N 6
#define maxsize 50
//一个迷宫的表示出来,1代表阴影的部分,0代表白色的部分。
int mg[M][N]={
{1,1,1,1,1,1},
{1,0,0,0,1,1},
{1,0,1,0,0,1},
{1,0,0,0,1,1},
{1,1,0,0,0,1},
{1,1,1,1,1,1}

};

typedef struct
{
int i; //第i行
int j; //第j列
int di; //从此通道块走向下一通道块的方向
}sqtack; //定义栈和存放最短路径的数组。
sqtack stack[maxsize],path[maxsize];

int top=-1;
int cout=1; //路径数计数。
int minlen=maxsize; //最短路径长度。

void mgpath()
{
int i,j,di,find,k;
top++;
stack[top].i=1;stack[top].j=1;stack[top].di=-1;
mg[1][1]=-1;

while(top>-1)
{
i=stack[top].i;j=stack[top].j;di=stack[top].di;
if(i==M-2&&j==N-2)//找到出口,输出路径。
{
printf("%4d",cout++);
for(k=0;k<=top;k++)
{
printf("(%d %d)",stack[k].i,stack[k].j);
if((k=1)%5==0)
printf("\n");
}
printf("\n");

if(top+1<minlen)
{
for(k=0;k<=top;k++)
path[k]=stack[k];
minlen=top+1;
}

mg[stack[top].i][stack[top].j]=0;//让该位置变为其他路径可走结点。
top--;
i=stack[top].i;j=stack[top].j;di=stack[top].di;




}
find=0; //找到通道失败。
while(di<4&&find==0)
{
di++;
switch(di)
{

case 0: i=stack[top].i-1;j=stack[top].j;break;

case 1: i=stack[top].i;j=stack[top].j+1;break;

case 2: i=stack[top].i+1;j=stack[top].j;break;

case 3: i=stack[top].i;j=stack[top].j-1;break;

}



if(mg[i][j]==0)
find=1; //找到成功为1
}

if(find==1)
{
stack[top].di=di; //修改原栈顶元素的di值。
top++; //下一个可走节点进栈。
stack[top].i=i;
stack[top].j=j;
stack[top].di=-1;
mg[i][j]=-1;
}
else
{
mg[stack[top].i][stack[top].j]=0; //让该位置变为其他路径可走结点。
top--;
}

}

printf("最短路径:\n");
printf("长度:%d\n",minlen);
printf("路径:");
for(k=0;k<minlen;k++)
{
printf("(%d %d) ",path[k].i,path[k].j);
if((k+1)%5==0)
printf("\n");
}

printf("\n");


}

void main()
{
printf("迷宫所有路径如下:\n");
mgpath();
}
...全文
64 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
huhanfeng2010 2011-11-20
  • 打赏
  • 举报
回复
改成k-1
huhanfeng2010 2011-11-20
  • 打赏
  • 举报
回复
小错误if((k=1)%5==0)


#include <stdio.h>
#include <malloc.h>
#define M 6
#define N 6
#define maxsize 50
//一个迷宫的表示出来,1代表阴影的部分,0代表白色的部分。
int mg[M][N]={
{1,1,1,1,1,1},
{1,0,0,0,1,1},
{1,0,1,0,0,1},
{1,0,0,0,1,1},
{1,1,0,0,0,1},
{1,1,1,1,1,1}

};

typedef struct
{
int i; //第i行
int j; //第j列
int di; //从此通道块走向下一通道块的方向
}sqtack; //定义栈和存放最短路径的数组。
sqtack stack[maxsize],path[maxsize];

int top=-1;
int cout=1; //路径数计数。
int minlen=maxsize; //最短路径长度。

void mgpath()
{
int i,j,di,find,k;
top++;
stack[top].i=1;stack[top].j=1;stack[top].di=-1;
mg[1][1]=-1;

while(top>-1)
{
i=stack[top].i;j=stack[top].j;di=stack[top].di;
if(i==M-2&&j==N-2)//找到出口,输出路径。
{
printf("%4d",cout++);
for(k=0;k<=top;k++)
{
printf("(%d %d)",stack[k].i,stack[k].j);
if((k-1)%5==0)
printf("\n");
}
printf("\n");

if(top+1<minlen)
{
for(k=0;k<=top;k++)
path[k]=stack[k];
minlen=top+1;
}

mg[stack[top].i][stack[top].j]=0;//让该位置变为其他路径可走结点。
top--;
i=stack[top].i;j=stack[top].j;di=stack[top].di;




}
find=0; //找到通道失败。
while(di<4&&find==0)
{
di++;
switch(di)
{

case 0: i=stack[top].i-1;j=stack[top].j;break;

case 1: i=stack[top].i;j=stack[top].j+1;break;

case 2: i=stack[top].i+1;j=stack[top].j;break;

case 3: i=stack[top].i;j=stack[top].j-1;break;

}



if(mg[i][j]==0)
find=1; //找到成功为1
}

if(find==1)
{
stack[top].di=di; //修改原栈顶元素的di值。
top++; //下一个可走节点进栈。
stack[top].i=i;
stack[top].j=j;
stack[top].di=-1;
mg[i][j]=-1;
}
else
{
mg[stack[top].i][stack[top].j]=0; //让该位置变为其他路径可走结点。
top--;
}

}

printf("最短路径:\n");
printf("长度:%d\n",minlen);
printf("路径:");
for(k=0;k<minlen;k++)
{
printf("(%d %d) ",path[k].i,path[k].j);
if((k+1)%5==0)
printf("\n");
}

printf("\n");


}

void main()
{
printf("迷宫所有路径如下:\n");
mgpath();
}
goldbeef 2011-11-20
  • 打赏
  • 举报
回复
单步调试
内容概要:本文档是2025年全国广播电视技术能手竞赛IPTV专业的竞赛内容大纲,旨在指导参赛选手准备比赛。竞赛分为理论和实操两大部分。理论部分涵盖基本知识、基础理论和专业知识,包括法律法规、技术标准、IPTV技术基础、信号传输与分发、网络和数据安全等。实操部分则涉及IPTV系统设备、仪器设备的操作使用和指标测量。具体内容包括IPTV系统架构、传输技术与指标、设备配置及维护、专业技能如测量工具使用、视音频指标测量、直播点播协议分析、播出网络性能测量、网络安全数据分析以及系统故障排查等。 适合人群:从事或有意从事IPTV相关工作的技术人员,尤其是有志于参加全国广播电视技术能手竞赛的专业人士。 使用场景及目标:①帮助参赛选手全面了解并掌握IPTV相关的法规文件和技术标准;②提升选手对IPTV系统架构、传输技术和设备配置的理解;③增强选手在实际操作中的测量、分析和故障排查能力;④确保选手能够熟练运用各种测量工具和分析软件进行视音频指标测量和网络安全数据分析。 阅读建议:由于文档内容详尽且专业性强,建议读者在学习过程中结合实际案例和操作练习,同时参考相关技术文献,以便更好地理解和掌握竞赛所需的知识和技能。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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