- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
农夫过河问题源代码
#includeiostream.h
#define M 20
typedef struct node
{
int front;
int rear;
int data[M];
}SeqQueue;
SeqQueue *creat(SeqQueue *Q)//创建队列
{
Q=new SeqQueue;
if(Q==NULL) cout无空间;
else {
Q-front=0;
Q-rear=0;
}
return Q;
}
int empty(SeqQueue *Q)//判空
{
return (Q-front==Q-rear);
}
void insequeue(SeqQueue *Q,int x)
{
if(((Q-rear+1)%M)==Q-rear)
cout队列已满!endl;
else {
Q-data[Q-rear]=x;
Q-rear=(Q-rear+1)%M;
}
}
void desequeue(SeqQueue *Q)
{
if(Q-rear==Q-front)
{
cout队已空;
}
else Q-front=(Q-front+1)%M;
}
int frontsequeue(SeqQueue *Q)
{
if(Q-rear==Q-front)
{
cout队已空;
return 0;
}
else return (Q-data[Q-front]);
}
//0x01:0000 0001 羊
//0x02:0000 0010 白菜
//0x04:0000 0100 狼
//0x08:0000 1000 农夫
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)==cabbage(location))
(goat(location)!=farmer(location)))
return 0;
if((goat(location)==wolf(location))
(goat(location)!=farmer(location)))
return 0;
return 1;
}
void printfarmer(int location)
{
if(location8)
cout农夫:北岸\t;
else cout农夫:南岸\t;
}
void printwolf(int location)
{
if((location12location7)||location4)
{
cout狼:北岸\t\t;
}
else cout狼:南岸\t\t;
}
void printfcabbage(int location)
{
if(location%4==0||location%4==1)
{
cout白菜:北岸\t;
}
else cout白菜:南岸\t;
}
void printfgoat(int location)
{
if(location%2==0)
{
cout羊:北岸\t;
}
else cout羊:南岸\t;
}
void main()
{
int i,m,newlocation,location,route[M];//m为正在移动的物品route[M]用于记录已考虑的状态路径
SeqQueue *Q;
Q=creat(Q);
insequeue(Q,0x00);
for(i=0;i16;i++)
route[i]=-1;
route[0]=0;
cout---------------------------农夫过河问题-----------------------------endlendl;
while(!empty(Q)(route[15]==-1))//Q非空或已全部被访问过
{
location=frontsequeue(Q);//取对头状态为当前状态
desequeue(Q);//队头元素出队
for(m=1;m=8;m=1)//考虑各种物品移动
{
if((0!
您可能关注的文档
最近下载
- 2024详解《铸牢中华民族共同体意识》党课课件.pptx VIP
- 2023新加坡数学竞赛SMO(含答案)Junior组第一轮.pdf
- 2024半导体材料行业报告-华安证券.docx VIP
- 质量意识培训PPT_为什么要重视质量?.ppt
- 最新苏教版三年级英语上册全册全套课件.ppt
- Unit 2 Different families达标测试卷(含答案)2024-2025学年度-人教PEP(2024)英语三年级上册.docx VIP
- YBT 037-1993 优质结构钢冷拉扁钢.pdf
- 佳能MF8030Cn_8050Cn_8350Cdn维修手册中文版(第一次修订).pdf
- 达格列净二甲双胍缓释片(I)-临床用药解读.pptx
- 马凡综合征遗传病ppt.pptx
文档评论(0)