人狗菜过河c语言,关于C语言编写人狗鸡米过河问题?

08f017fa918318c90f41882bcd77a61a.png

#include "stdio.h"/*对本系统来说,可取状态向量可以通过穷举法列出来。可取向量共10个 ,而且右边5个正好是左边5个的相反状态。我们将船的一次运载也用向量表示,当一物在船上时相应分量记为1,否则记为0。如(1,1,0,0)表示人和狗在船上。(1,1,1,1)(0,0,0,0)(1,1,1,0)(0,0,0,1)(1,1,0,1)(0,0,1,0)(1,0,1,1)(0,1,0,0)(1,0,1,0)(0,1,0。1)        本系统的运算向量有四个:(1,0,1,0),(1,1,0,0),(1,0,0,1),(1,0,0,0)        一次过河就是一状态向量和一运算向量的加法,在加法运算中,对每一分量采用二进制。(0+0=0,1+0=0+1=1,1+1=0)。       根据以上假定,人,狗,鸡,米过河问题转化为:找出从状态(1,1,1,1)经过奇数次运算变为状态(0,0,0,0)的系统状态转移过程。      */struct vex {int hum;int dog;int coc;int ric;};vex start,meth[4];void Initstate(){start.hum=1;start.dog=1;start.coc=1;start.ric=1;    //(1,0,1,0),(1,1,0,0),(1,0,0,1),(1,0,0,0)meth[0].hum=1;meth[0].dog=0;meth[0].coc=1;meth[0].ric=0;meth[1].hum=1;meth[1].dog=1;meth[1].coc=0;meth[1].ric=0;meth[2].hum=1;meth[2].dog=0;meth[2].coc=0;meth[2].ric=1;meth[3].hum=1;meth[3].dog=0;meth[3].coc=0;meth[3].ric=0;}vex Padd(vex a,vex b){vex sum;sum.hum=(a.hum+b.hum)%2;sum.dog=(a.dog+b.dog)%2;sum.coc=(a.coc+b.coc)%2;sum.ric=(a.ric+b.ric)%2;return sum;}bool Issafestate(vex s){if(s.hum==1&&s.dog==1&&s.coc==1&&s.ric==1)return true;if(s.hum==1&&s.dog==1&&s.coc==1&&s.ric==0)return true;if(s.hum==1&&s.dog==1&&s.coc==0&&s.ric==1)return true;if(s.hum==1&&s.dog==0&&s.coc==1&&s.ric==1)return true;if(s.hum==1&&s.dog==0&&s.coc==1&&s.ric==0)return true;if(s.hum==0&&s.dog==0&&s.coc==0&&s.ric==0)return true;if(s.hum==0&&s.dog==0&&s.coc==0&&s.ric==1)return true;if(s.hum==0&&s.dog==0&&s.coc==1&&s.ric==0)return true;if(s.hum==0&&s.dog==1&&s.coc==0&&s.ric==0)return true;if(s.hum==0&&s.dog==1&&s.coc==0&&s.ric==1)return true;return false;}void main(){Initstate();vex safestate,tmp;while(start.hum!=0||start.dog!=0||start.coc!=0||start.ric!=0){for(int i=0;i<4;i++){tmp=Padd(start,meth[i]);if(Issafestate(tmp)){start=tmp;printf("(%d,%d,%d,%d)",start.hum,start.dog,start.coc,start.ric);getchar();}}}}

◆◆

评论读取中....

请登录后再发表评论!

◆◆

修改失败,请稍后尝试

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值