我也是这个问题,先说说我的思路吧。
定义一个boolean 数组arr,其中角标从0-4分别为农夫狗猫鱼
默认数组中的全部元素都为false,即在河这边,那么使用true标记目标在河对面。
初始条件 全部元素都为false
设定循环 每次循环开始满足条件的元素取反,即渡河。
设定条件 1.农夫在河这边的时候,允许存在猫狗鱼在和农夫同一岸侧,即允许arr[0]==arr[1]==arr[2]==arr[3]
2.当农夫不在河这边时,不允许猫和鱼或狗和鱼在同一侧,即不允许存在arr[0]!=arr[1]&arr[2]或arr[0]!=arr[2]&arr[3];
3.除农夫外上次取反的值这次不能再一次取反。即带过来的动物不能直接带回去,因为这样没意义。。
循环结束条件 当arr[0]==arr[1]==arr[2]==arr[3]==true时结束循环,即全部渡河。
这样可以得到真值表,然后读真值表就可以得出过程啦!不过思路在了变成程序还是个问题。。 |