求C语言高手解答,这是传教士野人过河问题。程序运行总是出现无解死循环,看不出问题,求大神解答!

这里是主程序。
/*主函数*/
void main()
{
sequenstack *s;/*定义栈*/
int pd;
struct zhuangtai topzt; /*栈顶元素*/
struct zhuangtai csjd; /*初始节点*/
s=init_sequenstack(); /*初始化栈*/

/*输入传教士与野人人数*/
printf("输入传教士人数:");
scanf("%d",&m);
printf("\n");
printf("输入野人人数:");
scanf("%d",&c);
printf("\n");
/*输入初始状态,并入栈*/
csjd.ml=m;
csjd.cl=c;
csjd.boat=1;
csjd.flag=0;
s=push_sequenstack(s,csjd);
/*取栈顶元素。。不停地取栈顶元素,然后不停地扩展,不停地判断,当栈顶元素变为0.0.1.0为止*/

while((s->top)+1)/*栈非空的情况下*/
{
topzt=gettop_sequenstack(s);/*取栈顶元素。之后对栈顶元素操作*/

if(topzt.boat==1)/*说明在左岸,进行P操作扩展一个节点,包括了将合法节点入栈的操作*/
{
s=Pcaozuo(s,topzt);

}
else/*否则在右岸,进行Q操作,扩展一个节点,包括了将合法节点入栈的操作*/
{
s=Qcaozuo(s,topzt);
}
topzt=gettop_sequenstack(s);/*取栈顶元素判断是否为目标节点*/
pd=mubiao(topzt);
if(pd==1) /*为目标节点则退出循环,否则继续扩展*/
break;
}
xianshi(s);
}

陷入死循环,说明 在退出循环的语句中出现了问题。不知道你如何定义的栈结构,所以你自己分析下,while((s->top)+1)与if(pd==1) 的判断是不是出错了。。
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网