0

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

1 に答える 1

0

よし、何かやってみよう。

検索の深さを制限するには、関数を変更する必要があります。下位レベルのノードが複数回印刷されるのを防ぐために、ノードを最大深度でのみ印刷します。

これは与える:

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();
    }
于 2014-04-12T21:08:28.103 に答える