グラフの多くのアルゴリズムでは、希望の結果の接続は通常parent
アレイに格納されます。グラフ - すでに2つの頂点間のパスを印刷する方法
たとえば、BFSまたはDFS、または最小スパニングツリー、または最短パスでは、各頂点の親をparent[]
に格納します。
私の質問は私だけなparent[]
を持っている場合、どのように私は簡単にO(n)の中で任意の頂点、たとえば、間のパスを取得することができるということですか?それはBFSまたはDFSか何か問題ではないことに注意してください。重要なのはparent[]
です。私はグラフアルゴリズムの形を取っています。
頂点の1つが他の頂点であれば、簡単にパスを取得できます。そうでない場合は、parent[]
を経由して1つの頂点からルートにトレースし、もう一度他の頂点に対して行います。祖先のルート(ルートに)がマージされます。そして、この結果はO(n^2)になります。なぜなら、ある頂点の各祖先を別の頂点のすべての祖先と比較してマージポイントを求める必要があるからです。
誰でも手助けできますか?
サイズがNのブール配列Aを使用すると、頂点iからルートに移動するときに、途中の各頂点にA [i] = trueとマークすると、マージポイントを求める手間が省けます。頂点jからルートに行くとき、A [i] == trueならば、それがマージポイント(最初の頂点)です。 – svinja
@svinjaええ、私はあなたのアプローチが正しいと思いますが、それはO(n)のスペースを含みます。 –
@svinja、あなたのコメントを回答に変更してください。正しいものとしてマークします。 –