人狼羊白菜过河问题首先是要保证狼羊白菜的存活,然后才是全部过河到对岸,要保证狼羊白菜的存活,就不能在没有人监护的情况下,让他们三者中狼羊,羊白菜在岸的同一端。我们用一个标志来标识人狼羊白菜的位置信息,0表示在岸A(始岸),1表示在船上,2表示在岸B(终岸),弄清楚了问题的关键后,就好动手实现了。示例代码如下:
//TestGuohe.h
#include <iostream>
#include <string>
class Man;
class Object
{
public:
Object()
{
nPos = 0;
}
public:
virtual std::string GetType() {return "Object";}
virtual bool eat(Object *pObj, Man *pMan)
{
return false;
}
public:
int nPos;
};
class Man
{
public:
Man()
{
nPos = 0;
}
virtual std::string GetType() {return "Man";}
bool GoWith(std::vector<Object *> &vecObj, size_t nIndex)
{
if(nIndex < 0 || nIndex > vecObj.size()-1)
{
return false;
}
if(nPos != vecObj[nIndex]->nPos)
{
return false;
}
nPos = 1;
vecObj[nIndex]->nPos = 1;
for(size_t i = 0; i < vecObj.size(); i++)
{
for(size_t j = 0; j <