c# - 深度优先搜索确实找到了传教士和食人者问题的解决方案状态

标签 c# search river-crossing-puzzle

我正在使用 C# 做关于传教士和食人族的项目。我使用了两种搜索算法,即广度优先搜索和深度优先搜索。使用广度优先搜索,程序在从根开始的第 12 层查找结果。但是使用深度优先搜索,它找不到解决方案,这使我的计算机挂起。我认为它进入了图表中的一个循环。所以我的问题是,我不能使用深度优先搜索来解决传教士和食人者问题吗?

广度优先搜索的代码是

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;
        }

最佳答案

看到你的代码很难说出答案。然而,根据我的经验:DFS 搜索并不能提供完整的解决方案。您的代码很可能陷入某种无限循环(这在 dfs 中很常见)或者(因为您正在检查 isVisited),您有可能没有达到最终目标。

关于c# - 深度优先搜索确实找到了传教士和食人者问题的解决方案状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11759616/

相关文章:

search - 强制在仓库中搜索包含某些关键字作为内容的文件

java - 使用 IDDFS 和 GreedyBFS 的食人者和传教士

java - Java 中的农夫、狼、山羊和卷心菜广度优先和深度优先搜索

c# - 在azure函数中使用MongoDB.Driver

c# - 如何保存而不是另存为

c# - 在 MediaElement 中流式传输 Youtube 视频 - Windows 应用商店应用

c# - 通过 C# (Microsoft.AnalysisServices) 进行的 SSAS 处理比 SSMS 慢得多

elasticsearch - 仅返回匹配的数组项,而不是ElasticSearch中的所有文档值

elasticsearch - 如何限制 Elasticsearch 的结果仅包含父类型文档?

optimization - 狐狸-山羊-卷心菜运输