我正在使用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;
}
答案 0 :(得分:3)
很难说出看到代码的答案。但是,根据我的经验:DFS搜索不提供完整的解决方案。很可能您的代码可能陷入某种无限循环(这与dfs相同)或(因为,您正在检查isVisited),您可能无法达到最终目标。
答案 1 :(得分:1)
所以我的问题是,我不能用Depth第一次搜索来解决传教士和食人族的问题吗?
是的,这是可能的,请看看这个网站: http://www.aiai.ed.ac.uk/~gwickler/missionaries.html
由于代码很难分辨出你的问题所在。