2016-02-20 2 views
0

У меня есть класс State и он содержит ArrayList ребер. Я пытаюсь вычислить путь из одного состояния в другое с помощью DFS.Рекурсивный DFS с неработающим ходом

public class State{ 
    private String name; 
    private ArrayList<State> edges; 

    public ArrayList<State> depth-first-search(State start, State goal, ArrayList<State> path){ 
     if (start.equals(goal)) { 
      path.add(start); 
      return path; 
     } 
     else 
     { 
      start.setFound(true); 
      for (State state: start.getEdges()) 
      { 
       if (!state.found) 
       { 
        //we haven't looked at this state, let's look at it 
        path.add(state); 
        path = depth-first-search(state, goal, path); 
       } 
      } 
      return path; 
     } 

Существует проблема с получением пути состояний, но я не уверен, что именно. Он просто продолжает смотреть на состояния даже после того, как мы нашли свою цель.

+0

Какая у вас функция DFS? –

+0

Опечатка, опечатка. Функция DFS - это поиск по глубине. @ OskarHýbl –

+0

Вы отмечаете узлы как посещенные? – csharpfolk

ответ

0
public List<State> dfs(State start, State goal) { 
    List<State> list = new ArrayList<State>(); 
    if (dfsImpl(start, goal, list)) 
     return list; 
    else 
     return null; 
} 

private boolean dfsImpl(State start, State goal, ArrayList<State> path) { 
     if (start.equals(goal)){ 
      path.add(start); 
      return true; 
     } 
     else{ 
      start.setFound(true); 
      for (State state: state.getEdges()){ 
       if (!state.found){ 
        //we haven't looked at this state, let's look at it 
        path.add(state); 
        if (DFS(state, goal, path)) 
         return true; 
       } 
      } 
     return false; 
    } 
Смежные вопросы