狼、羊、菜和农夫过河问题C++
时间: 2023-07-10 17:07:29 浏览: 235
基于C++的农夫过河问题算法设计与实现方法
5星 · 资源好评率100%
以下是一个简单的解决方案:
```c++
#include <iostream>
using namespace std;
int main() {
bool wolf = true; // 狼在左岸
bool goat = true; // 羊在左岸
bool cabbage = true; // 菜在左岸
bool farmer = true; // 农夫在左岸
while(wolf || goat || cabbage) { // 只要有一样还没过河,就继续循环
if(farmer) { // 农夫在左岸
if((wolf && goat) || (goat && cabbage)) {
// 狼和羊在一起,或羊和菜在一起,不合法,无法过河
cout << "无法过河" << endl;
break;
} else {
cout << "农夫带着";
if(wolf) cout << "狼";
if(goat) cout << "羊";
if(cabbage) cout << "菜";
cout << "过河" << endl;
wolf = !wolf; // 狼离开左岸
goat = !goat; // 羊离开左岸
cabbage = !cabbage; // 菜离开左岸
farmer = !farmer; // 农夫离开左岸
}
} else { // 农夫在右岸
cout << "农夫回到左岸" << endl;
farmer = !farmer; // 农夫回到左岸
}
}
return 0;
}
```
这个程序会不断循环,直到狼、羊和菜都过了河。每次循环,如果农夫在左岸,就判断当前状态是否合法(狼和羊在一起,或羊和菜在一起),如果合法就让农夫带着一些东西过河,否则输出“无法过河”并退出循环。如果农夫在右岸,就让他回到左岸。注意每次过河后要更新狼、羊和菜的位置。
阅读全文