3

ツリー内の各ノードがグラフから複数の頂点を持つことができるTreeDecompositionに取り組んでいます。
今、私は木の根から頂点uを含む最初のノードを見つけようとしています。

int Tree::traversing(Node* node, int u){ 
    //search in current node
    int j = node->point_in_bag(u); //this function returns position of vertex u in node if not available -1
    if(j != -1){
       return node->index;
    }
    else{       
    // traverse in its children
    for(int k=0; k<node->children.size(); k++){ // children has the node's childs in it
        Node* nod = node->children[k];
        cout << "nod index is " << nod->index << endl;
        traversing(nod,u); // if vertex isn't found in node, traverse again in its children
        }
    }
}

上記のように試しましたが、正確なノードインデックスが返されません。私はどこで間違っているのですか。

4

1 に答える 1

2

あなたはここを忘れましreturnた:

traversing(nod,u);

したがって、再帰呼び出しはランダムなデータを返します(そして未定義の動作があります)。

戻ったとしても、最初の子からのインデックスのみを返します。
見つからない場合は、探し続ける必要があります。

for(int k=0; k<node->children.size(); k++){
    Node* nod = node->children[k];
    int childIndex = traversing(nod,u);
    if (childIndex != -1)
        return childIndex;
}
return -1;

コンパイラの警告レベルを上げる必要があります。

于 2013-03-06T09:29:23.367 に答える