Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用my DFS进行迭代深化搜索_Java_Search_Iterative Deepening - Fatal编程技术网

Java 使用my DFS进行迭代深化搜索

Java 使用my DFS进行迭代深化搜索,java,search,iterative-deepening,Java,Search,Iterative Deepening,我有一个DFS搜索,现在我正试图用这个DFS实现迭代深化搜索,但我真的不明白我应该怎么做。我试过很多方法,但最后我发现它是错误的!你有什么建议,我应该做什么改变 public void dfs() { Stack s=new Stack(); s.push(this.rootNode); rootNode.visited=true; printNode(rootNode); while(!s.isEmpty(

我有一个DFS搜索,现在我正试图用这个DFS实现迭代深化搜索,但我真的不明白我应该怎么做。我试过很多方法,但最后我发现它是错误的!你有什么建议,我应该做什么改变

public void dfs()
    {
        Stack s=new Stack();
        s.push(this.rootNode);
        rootNode.visited=true;
        printNode(rootNode);
        while(!s.isEmpty())
        {
            Node n=(Node)s.peek();
            Node child=getUnvisitedChildNode(n);
            if(child!=null)
            {
                child.visited=true;
                printNode(child);
                s.push(child);
            }
            else
            {
                s.pop();
            }
        }
        clearNodes();
    }

好吧,让我们试试看

您需要更改函数以限制搜索深度。为了防止较低级别的节点被多次打印,我将仅以最大深度打印节点

这使得:

public void ids(int limit)
    {
        for (int n = 1; n <= limit; ++n)
        {
            dfs(n);
        }
    }

public void dfs(int limit)
    {
        Stack s=new Stack();
        s.push(this.rootNode);
        rootNode.visited=true;
        while(!s.isEmpty())
        {
            Node n=(Node)s.peek();

            if (stack.size() == limit)
            {
                printNode(n);
                s.pop();
            } else {
                Node child=getUnvisitedChildNode(n);
                if(child!=null)
                {
                    child.visited=true;
                    s.push(child);
                }
                else
                {
                    s.pop();
                }
            }
        }
        clearNodes();
    }
公共无效ID(整数限制)
{

对于(int n=1;n您的dfs函数没有搜索任何内容,它只是遍历整个图形。是的,这是正确的,而且我也希望进行相同的迭代深化搜索如果没有达到目标,那么进行ids是没有意义的?在每个级别中,它都完全运行dfs。级别0、1、2……的dfs分别运行。@user2944170您是什么数据结构遍历?二叉树还是其他什么?非常感谢。非常有用!终于成功了。您的更改非常小且整洁。tnx