我正在使用C#在傳教士和食人族上做我的項目。我使用了兩種搜索算法,即廣度優先搜索和深度優先搜索。使用廣度優先搜索,程序從根目錄找到第12級的結果。但使用深度首次搜索,它無法找到解決方案,這掛我的電腦。我認爲它在圖表中進入一個循環。所以我的問題是,我不能使用Depth首先搜索來解決傳教士和食人族的問題嗎?深度第一搜索確實發現傳教士和食人族問題的解決狀態
代碼廣度優先搜索是
public State getSolutionStatesBFS(State StartState, State EndState)
{
State CurState = new State();
ArrayList visited = new ArrayList();
addStateToAgenda(StartState, true);
while (searchAgenda.Count > 0) {
CurState = (State)searchAgenda.Dequeue();
if (CurState.Equals(EndState)) {
break;
} else {
if (!isVisited(CurState, visited))
{
generateSucessors(CurState, true);
visited.Add(CurState);
}
}
}
return CurState;
}
和深度優先搜索代碼
public State getSolutionStatesDFS(State StartState, State EndState)
{
State CurState = new State();
ArrayList visited = new ArrayList();
addStateToAgenda(StartState, false);
while (searchAgendaS.Count > 0)
{
CurState = (State)searchAgendaS.Pop();
if (CurState.Equals(EndState))
{
break;
}
else
{
if(!isVisited(CurState,visited))
{
generateSucessors(CurState, false);
}
}
}
return CurState;
}
我們應該猜測'addStateToAgenda'和'generateSucessors'是如何實現的嗎?你有沒有調試過你的代碼?在使用isVisited之前,DFS/BFS問題相當容易用普通的*調試器* – Shai 2012-08-01 12:52:36