Java 路径未按预期运行的递归DFS

Java 路径未按预期运行的递归DFS,java,Java,我有一个State类,它包含一个边的ArrayList。我正在尝试使用DFS计算从一个状态到另一个状态的路径 public class State{ private String name; private ArrayList<State> edges; public ArrayList<State> depth-first-search(State start, State goal, ArrayList<State> path){

我有一个State类,它包含一个边的ArrayList。我正在尝试使用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;
        }
公共类状态{
私有字符串名称;
私有数组列表边;
公共ArrayList深度优先搜索(状态开始、状态目标、ArrayList路径){
如果(开始等于(目标)){
添加路径(开始);
返回路径;
}
其他的
{
start.setFound(true);
for(状态:start.getEdges())
{
如果(!state.found)
{
//我们还没有看到这个状态,让我们看看它
添加(状态);
路径=深度优先搜索(状态、目标、路径);
}
}
返回路径;
}
获取状态路径有一个问题,但我不确定具体是什么。它只是在我们找到目标后继续查看状态。

公共列表dfs(状态开始,状态目标){
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;
    }
列表=新的ArrayList(); if(dfsImpl(开始、目标、列表)) 退货清单; 其他的 返回null; } 私有布尔dfsImpl(状态开始、状态目标、ArrayList路径){ 如果(开始等于(目标)){ 添加路径(开始); 返回true; } 否则{ start.setFound(true); for(状态:State.getEdge()){ 如果(!state.found){ //我们还没有看到这个状态,让我们看看它 添加(状态); if(DFS(状态、目标、路径)) 返回true; } } 返回false; }
您的DFS函数是什么样子的?抱歉,输入错误。DFS函数是深度优先搜索。@OskarHýbl您是否将节点标记为已访问?@csharpfolk状态标记为已访问,行为:start.setfind(true);this
for(State-State:State.getEdges())
应该是for(State-State:start.getEdges()),对吗?(可能是另一个打字错误,但无论如何;)