0

ツリー全体を解析し、検索クエリに一致する可能性のあるすべての結果を見つけて、それらすべてをリストとして返すことになっている検索アルゴリズムがあります。これはアルゴリズムの要点ではないことはわかっていますが、幅優先検索と深さ優先検索のテストとしてこれを行って、タイミングを合わせて最速のものを確認しています。他の 2 つの検索は意図したとおりに機能しますが、DFID 検索の目的と同じ検索情報を入力すると、空のリストが表示されます。したがって、データが正しいことはわかっていますが、アルゴリズムの何かが間違っているだけで、何が原因なのかわかりません。ウィキペディアの疑似コードに基づいてこれを書きました。ここに私が持っているものがあります:

boolean maxDepth = false;
List<String> results = new ArrayList<String>();

public List<String> dfid(Tree t, String goal)
{
    int depth = 0;

    while (!maxDepth)
    {
        System.out.println(results);
        maxDepth = true;
        depth += 1;
        dls(t.root, goal, depth);
    }
    return results;
}

public void dls(Node node, String goal, int depth)
{
    System.out.println(depth);
    if (depth == 0 && node.data.contains(goal))
    {
        //set maxDepth to false if the node has children
        if (!node.children.isEmpty())
        {
            maxDepth = false;
        }
        results.add(node.data);
    }
    else if (depth > 0)
    {
        for(Node child : node.children)
        {
            dls(child, goal, depth-1);
        }
    }
}
4

1 に答える 1

2

zim-zam が提案した行を交換し、else if depth > 0 の後に別の else を追加して maxDepth を false に反転します

于 2013-04-15T15:54:42.837 に答える