Поиск в глубине действительно нашел решение проблем миссионеров и каннибалов

Я делаю свой проект на миссионеров и людоедов с использованием 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;
        }

2 ответа

Решение

Трудно сказать ответ, увидев ваш код. Однако, исходя из моего опыта: поиск в DFS не дает полного решения. Существует хорошая вероятность того, что ваш код мог застрять в каком-то бесконечном цикле (что характерно для dfs) ​​или (поскольку вы проверяете isVisited), есть вероятность того, что вы не достигли конечной цели.

Итак, мой вопрос: не могу ли я использовать поиск в глубину для решения проблемы миссионеров и каннибалов?

Да, это возможно, посмотрите на этот сайт: http://www.aiai.ed.ac.uk/~gwickler/missionaries.html

С данным кодом трудно сказать, где ваша проблема.

Другие вопросы по тегам