农夫兔子 狐狸 蔬菜过河伪代码C语言
时间: 2024-12-31 21:33:03 浏览: 5
农夫、兔子和狐狸过河的故事通常是一个经典的算法题,用来演示递归和策略设计模式。下面是一个简单的C语言伪代码版本,描述的是如何帮助农夫安全地将所有动物从一边的岸运到另一边:
```c
typedef enum { FARMER, RABBIT, FOX } Animal;
// 动物过河函数
void ferry(Animal from, Animal to, bool* river) {
if (from == to) {
// 如果是从同一条船上返回,则无需操作
return;
}
if (*river) {
// 河上有船,先转移其他不受威胁的生物
if (from != RABBIT && to != RABBIT && from != FOX) {
ferry(from, RABBIT, river);
ferry(RABBIT, to, river);
ferry(RABBIT, FARMER, river); // 农夫拿回渡船
} else if (from == RABBIT && to != FOX) {
ferry(RABBIT, FARMER, river); // 先让兔子上岸
} else if (from == Fox && to != RABBIT) {
ferry(Fox, FARMER, river); // 先让狐狸上岸
}
} else {
*river = true; // 将渡船放到河上
if (from == RABBIT || from == FOX) {
ferry(from, FARMER, river); // 让农夫带动物过去
ferry(FARMER, to, river); // 农夫再回来取船
} else {
ferry(from, to, river); // 直接转移农夫
}
*river = false; // 取消渡船
}
}
// 主函数,初始化并开始渡河过程
int main() {
bool riverInitial = false; // 初始假设无船
ferry(Animal.FARMER, Animal.RABBIT, &riverInitial);
ferry(Animal.FOX, Animal.RABBIT, &riverInitial); // 结束流程
return 0;
}
```
阅读全文