/** 农夫过河问题
*
* 大家有没有看过我的C学习中的位算,我们用8位二进制的数字来表示任务的完成与否,1完成、0未完成
* 现在我们用4个二进制数来代表
* 第一位表示农夫(1:北岸,0:南岸)
* 第二位表示狼 (1:北岸,0:南岸)
* 第三位表示?? (1:北岸,0:南岸)
* 第四位表示白菜(1:北岸,0:南岸)
* 我们怎么判断农夫在哪(是不是把当前状态与1000进行 & 操作,为1就在北岸,为0 就在南岸)
* 那么判断安全(羊的位置不等于狼,羊位置不等于白菜,且两个状态可以存在的是农夫在)
* 那么接下去我们来进行广度优先的遍历,当满足条件时,我们就把新的状态push进队列中去
* 且我们要记录路径,所以需要一个并查集数组,0-15即可
*
*/
#include <iostream>
#include <stdio.h>
#include "SqQueue.h"
#define BIT(x) (1<<x)
#include <vector>
#include <algorithm>
using namespace std;
//第一位农夫。第二位狼。第三位白菜,第四位白菜
enum Status{
FARMER = BIT(3), //农夫
WOLF = BIT(2), //狼
GOAT = BIT(1), //羊
CABBAGE = BIT(0) //白菜
};
//farmer的位置
int farmer(int location){
if((location&FARMER) != 0)
return 1;
return 0;
}
//wolf的位置
int wolf(int location){
if((location&WOLF) != 0)
return 1;
return 0;
}
//goat的位置
int goat(int location){
if((location&GOAT) != 0)
return 1;
retu
C++ 农夫过河问题
最新推荐文章于 2022-10-11 20:45:15 发布