农夫过河问题??C语言 运行无结果

may_Xia 2016-12-19 09:45:38
#include<stdio.h>
#include<stdlib.h>

struct Node;
typedef struct Node *PNode;
struct Node
{
int info;
PNode link;
};
struct LinkQueue
{
PNode f;
PNode r;
};
typedef struct LinkQueue *PLinkQueue;

PLinkQueue Create_EmptyLinkQueue(void)
{
PLinkQueue p;
p=(PLinkQueue)malloc(sizeof(LinkQueue));
if(p!=NULL)
{
p->f=NULL;
p->r=NULL;
}
else printf("Out of space!\n");
return p;
}

void Enter_LinkQueue(PLinkQueue q,int x)
{
PNode p=(PNode)malloc(sizeof(Node));
if(p==NULL) printf("Out of space!\n");
else
{
p->info=x;
p->link=NULL;
if(q->f==NULL) q->f=p;
else q->r->link=p;
q->r=p;
}
}

void Delete_LinkQueue(PLinkQueue q)
{
PNode p;
if(q->f==NULL) printf("Empty queue.\n");
else
{
p=q->f;
q->f=q->f->link;
free(p);
}
}

int Front_LinkQueue(PLinkQueue p)
{
if(p->f==NULL) printf("Empty queue.\n");
else return(p->f->info);
}

int IsEmpty_LinkQueue(PLinkQueue p)
{
return(p->f!=NULL);
}

int farmer(int location)
{
return(0!=location&0x08);
}

int wolf(int location)
{
return(0!=location&0x04);
}

int cabbage(int location)
{
return(0!=location&0x02);
}

int goat(int location)
{
return(0!=location&0x01);
}

int safe(int location)
{
if(goat(location)==wolf(location)&&goat(location)!=farmer(location))
return 0;
if(cabbage(location)==goat(location)&&cabbage(location)!=farmer(location))
return 0;
return 1;
}

void FarmerProblem()
{
int i,movers,location,newlocation;
int route[16];
PLinkQueue moveto;
moveto=Create_EmptyLinkQueue();
Enter_LinkQueue(moveto,0x00);
printf("当前入队状态是%d\n",0x00);
for(i=0;i<16;i++)
route[i]=-1;

route[0]=0;
while(!IsEmpty_LinkQueue(moveto)&&(route[15]==-1))
{
location=Front_LinkQueue(moveto);
printf("当前出队的状态是%d\n",location);
Delete_LinkQueue(moveto);
for(movers=1;movers<=8;movers<<=1)
{
if((0!=(location&&0x08))==(0!=(location&&movers)))
{
newlocation=location^(0x08|movers);
if(safe(newlocation)&&route[newlocation]==-1)
{
route[newlocation]=location;
Enter_LinkQueue(moveto,newlocation);
printf("当前入队的状态是%d\n",newlocation);
}
}
}
}
if(route[15]!=-1)
{
printf("反路径为:\n");
for (location=15;location>=0;location=route[location])
{
printf("The location is : %d\n", location);
if (location == 0) exit(0);
}
}
else printf("问题无解.\n");
}

int main()
{
FarmerProblem();
return 0;
}

运行显示"当前入队状态是0,问题无解."
求教???为什么运行无结果???谢谢!
...全文
343 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-12-20
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
may_Xia 2016-12-20
  • 打赏
  • 举报
回复
话说,如果要输出所有解的情况,该怎么办呢?
fefe82 2016-12-20
  • 打赏
  • 举报
回复
引用 3 楼 may_Xia 的回复:
[quote=引用 2 楼 paschen 的回复:] 另外,Front_LinkQueue函数不是所有情况都指定了返回值
恩!我把一系列括号都加上了,然后改了 int Front_LinkQueue(PLinkQueue p) { if(p->f==NULL) { printf("Empty queue.\n"); return 0; } else return(p->f->info); } ??编译显示 cannot open output file C:........................ Permission denied [Error] Id returned 1 exit status 这是为啥。。?谢谢! [/quote] 看看上一个运行的窗口是不是还没关 ....
may_Xia 2016-12-20
  • 打赏
  • 举报
回复
求解答啊,成功的话分全给,谢谢!!!
may_Xia 2016-12-19
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
另外,Front_LinkQueue函数不是所有情况都指定了返回值




恩!我把一系列括号都加上了,然后改了
int Front_LinkQueue(PLinkQueue p)
{
if(p->f==NULL)
{
printf("Empty queue.\n");
return 0;
}
else return(p->f->info);
}

??编译显示
cannot open output file C:........................ Permission denied
[Error] Id returned 1 exit status
这是为啥。。?谢谢!
paschen 2016-12-19
  • 打赏
  • 举报
回复
另外,Front_LinkQueue函数不是所有情况都指定了返回值
paschen 2016-12-19
  • 打赏
  • 举报
回复
return(0!=location&0x08); 改成: return(0!=(location&0x08));

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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