为什么我在输入完出口后,过一会程序就自己停止了?
下面是迷宫求解函数,问题应该就在这
void Path(int **maze,int m,int n) //迷宫求解
{
Direct direct[4]; //定义东,南,西,北四个方向
direct[0].x = 0,direct[0].y = 1; //向东走
direct[1].x = 1,direct[1].y = 0; //向南走
direct[2].x = 0,direct[2].y = -1; //向西走
direct[3].x = -1,direct[3].y = 0; //向北走
LNode *stack;
Temp T[MAX],temp;
int x,y,X,Y,d,count = 0,length,minlength;
bool find = false;
*(*(maze+1)+1) = -1;
temp.x = 1,temp.y = 1,temp.d = -1;
Init(stack);
Push(stack,temp);
while(!isEmpty(stack))
{
getPop(stack,&temp);
x = temp.x,y = temp.y,d = temp.d + 1;
if(x == m&&y == n)
{
length = 0;
printf("迷宫第%d条路径如下:",++count);
while(!isEmpty(stack)){
Pop(stack,&temp);
T[length++] = temp;
}
if(length < minlength)
{
minlength = length;
}
for(int i = 1;length > 0;i++)
{
printf("[%d,%d],%d ",T[--length].x,T[length].y,T[length].d);
Push(stack,T[length]);
if(i % 5 == 0)
printf("\n");
}
printf("\n");
Pop(stack,&temp);
*(*(maze+temp.x)+temp.y) = 0;
}
else
{
Pop(stack,&temp);
*(*(maze+temp.x)+temp.y) = 0;
}
while(d<4)
{
X = x + direct[d].x;
Y = y + direct[d].y;
if(*(*(maze+X)+Y) == 0)
{
temp.x = X,temp.y = Y,temp.d = d;
Push(stack,temp);
x = X,y = Y,*(*(maze+X)+Y) = -1;
d = 0;
}
else
{
d++;
}
}
}
printf("最短的一条路径是路径是第%d条路径\n",minlength);
if(find == false)
printf("该迷宫没有可以到达出口的路径!\n");
}
C语言数据结构链栈迷宫问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 普通网友 2022-12-24 00:24关注
该程序似乎旨在解决迷宫问题并打印它找到的路径。该程序在搜索解决方案时使用堆栈来存储路径的位置和方向。栈在迷宫的起点被初始化,程序继续寻找解,直到栈为空。
有几个可能的原因会导致程序在一段时间后自行停止。一种可能是程序遇到无限循环。这可能是由程序逻辑错误引起的,例如缺少 break 语句或条件始终为真。
另一种可能性是程序内存不足。该程序使用一个结构数组来存储路径,如果该数组不够大以容纳所有路径,则可能导致程序崩溃或意外停止。
如果没有关于程序的具体行为和输入数据的更多信息,就很难查明问题的确切原因。我建议检查代码并检查可能导致程序自行停止的任何潜在问题或错误。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥30 STM32 INMP441无法读取数据
- ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
- ¥15 用visualstudio2022创建vue项目后无法启动
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
- ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
- ¥30 c#打开word开启修订并实时显示批注
- ¥15 如何解决ldsc的这条报错/index error
- ¥15 VS2022+WDK驱动开发环境