农夫过河文本文档

农夫过河文本文档

ID:37464364

大小:31.00 KB

页数:7页

时间:2019-05-24

农夫过河文本文档_第1页
农夫过河文本文档_第2页
农夫过河文本文档_第3页
农夫过河文本文档_第4页
农夫过河文本文档_第5页
资源描述:

《农夫过河文本文档》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、//farmerProblem.c//用队列解决农夫过河问题#include#includetypedefintDataType;//顺序队列:类型和界面函数声明structSeqQueue{//顺序队列类型定义intMAXNUM;//队列中最大元素个数intf,r;DataType*q;};typedefstructSeqQueue*PSeqQueue;//顺序队列类型的指针类型PSeqQueuecreateEmptyQueue_seq(intm){//创建一个空队列PSeqQueueq

2、ueue=(PSeqQueue)malloc(sizeof(structSeqQueue));if(queue!=NULL){queue->q=(DataType*)malloc(sizeof(DataType)*m);if(queue->q){queue->MAXNUM=m;queue->f=0;queue->r=0;return(queue);}elsefree(queue);}printf("Outofspace!!");//存储分配失败returnNULL;}intisEmptyQueue_seq(PSeqQueu

3、equeue){//判断队列是否为空return(queue->f==queue->r);}voidenQueue_seq(PSeqQueuequeue,DataTypex)//在队尾插入元素x{if((queue->r+1)%queue->MAXNUM==queue->f)printf("Fullqueue.");else{queue->q[queue->r]=x;queue->r=(queue->r+1)%queue->MAXNUM;}}voiddeQueue_seq(PSeqQueuequeue)//删除队列头部元素

4、{if(queue->f==queue->r)printf("EmptyQueue.");elsequeue->f=(queue->f+1)%queue->MAXNUM;}DataTypefrontQueue_seq(PSeqQueuequeue){if(queue->f==queue->r)printf("EmptyQueue.");elsereturn(queue->q[queue->f]);}//个体状态判断函数intfarmer(intlocation){//判断农夫的位置return(0!=(location

5、&0x08));}intwolf(intlocation){//判断狼的位置return(0!=(location&0x04));}intcabbage(intlocation){//判断白菜的位置return(0!=(location&0x02));}intgoat(intlocation){//判断羊的位置return(0!=(location&0x01));}//安全状态的判断函数intsafe(intlocation){//若状态安全则返回trueif((goat(location)==cabbage(location

6、))&&(goat(location)!=farmer(location)))return(0);//羊吃白菜if((goat(location)==wolf(location))&&(goat(location)!=farmer(location)))return(0);//狼吃羊return(1);//其他状态是安全的}main(){inti,movers,location,newlocation;introute[16];//用于记录已考虑的状态路径PSeqQueuemoveTo;//用于记录可以安全到达的中间状态mov

7、eTo=createEmptyQueue_seq(20);//创建空队列enQueue_seq(moveTo,0x00);//初始状态进队列for(i=0;i<16;i++)route[i]=-1;//准备数组route初值route[0]=0;while(!isEmptyQueue_seq(moveTo)&&(route[15]==-1)){location=frontQueue_seq(moveTo);//取队头状态为当前状态deQueue_seq(moveTo);for(movers=1;movers<=8;movers

8、<<=1)//考虑各种物品移动if((0!=(location&0x08))==(0!=(location&movers)))//农夫与移动的物品在同一侧{newlocation=location^(0x08

9、movers);//计算新状态if(safe(newlocatio

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。