【问题标题】:Iterative deepening search using my DFS使用我的 DFS 进行迭代深化搜索
【发布时间】:2014-04-12 20:25:59
【问题描述】:

我有一个 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();
    }

【问题讨论】:

  • 你的 dfs 函数没有搜索任何东西,它只是遍历整个图。
  • 是的,没错,我也想要同样的迭代深化搜索
  • 如果没有达到的目标,那么做 ids 是没有意义的
  • 为什么?在每个级别中,它都完全运行 DFS。分别为 0、1、2、... 级的 DFS。
  • @user2944170 你在遍历什么数据结构?二叉树还是别的什么?

标签: java search iterative-deepening


【解决方案1】:

好吧,我们试试看。

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

这给出了:

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

【讨论】:

  • 非常感谢。这很有帮助!最后它起作用了。你的零钱非常小而且很整洁。tnx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
相关资源
最近更新 更多