深度优先搜索确实在传教士和食人族问题中找到解决方案状态

时间:2012-08-01 12:47:58

标签: c# search river-crossing-puzzle

我正在使用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;
        }

2 个答案:

答案 0 :(得分:3)

很难说出看到代码的答案。但是,根据我的经验:DFS搜索不提供完整的解决方案。很可能您的代码可能陷入某种无限循环(这与dfs相同)或(因为,您正在检查isVisited),您可能无法达到最终目标。

答案 1 :(得分:1)

所以我的问题是,我不能用Depth第一次搜索来解决传教士和食人族的问题吗?

是的,这是可能的,请看看这个网站: http://www.aiai.ed.ac.uk/~gwickler/missionaries.html

由于代码很难分辨出你的问题所在。