這個問題是人工智慧中經典的搜尋問題,下面用深度優先搜尋演算法來解這個題,示例**如下:
#include #include #include using namespace std;
typedef struct
mcnode;
listfringe;//相當於佇列
vectorclosed;//closed表
//判斷是否是目標結點
bool isgoal(mcnode tnode)
//判斷是否是合法狀態
bool islegal(mcnode tnode)
else
return false;
}//過載運算子,判斷兩結構體是否相等
bool operator==(mcnode m1,mcnode m2)
//判斷是否已在closed表中
bool isclosed(mcnode tnode)
if(i==closed.size())
return false;
}void expandnode(mcnode tnode,int b,list&fringe)
else
for(int i=0;i<5;i++)
if(islegal(node[i])&&!isclosed(node[i]))
fringe.push_front(node[i]);//佇列後進先出,深度優先搜尋,最後得到一條最小解序列
// fringe.push_back(node[i]);//佇列後進後出,廣度優先搜尋,最後得到最小解序列狀態空間圖
}void main()
{ mcnode initnode,unode;
initnode.m=3;
initnode.c=3;
initnode.b=1;
fringe.push_back(initnode);//將初始狀態空間加入到佇列
while(!fringe.empty())
{ unode=fringe.front();
fringe.pop_front();
if(isgoal(unode))
{ closed.push_back(unode);
for(int i=0;i!=closed.size();i++)
cout《渡法說明:
2個野人去,1個野人回
2個野人去,1個野人回
2個傳教士去,1個野人與1個傳教士回
2個傳教士去,1個野人回
2個野人去,1個野人回
2個野人去,完成
野人與傳教士過河問題
題目 設有三個 傳教士和3個野人來到河邊,打算乘乙隻船從右岸渡到左岸去。該船的負載能力為兩個人。在任何時候,如果野人人數超過傳教士人數那麼野人就會把傳教士吃掉。他們怎樣才能用這條船安全地把所有人都渡過河去?河岸 a 對岸 b 船上 2c 2y 1c 1y回去 傳教士划船回去 河岸 a 對岸 b 船上...
傳教士與野人過河問題
360公司 2012年校園招聘會筆試題演算法題 傳教士和野人問題 missionaries and cannibals 這是乙個經常在有關討論人工智慧的書籍中見到的問題,其描述是這樣的 有n個傳教士和n個野人來到河邊渡河,河岸有一條船,每次至多可供k人乘渡。問傳教士為了安全起見,應如何規劃擺渡方案,...
傳教士與野人過河問題
360公司 2012年校園招聘會筆試題演算法題 傳教士和野人問題 missionaries and cannibals 這是乙個經常在有關討論人工智慧的書籍中見到的問題,其描述是這樣的 有n個傳教士和n個野人來到河邊渡河,河岸有一條船,每次至多可供k人乘渡。問傳教士為了安全起見,應如何規劃擺渡方案,...