私は再帰構造を使用して構成されたライブラリを作成しています。ツリー構造(グラフ)でループを検出する
ここでは、定義された「ルート」ノードがあり、各ノードが「子」以上を参照できるため、これらのグラフ構造を「ツリー」と呼んでいます。適切に設定すると、ループは存在しません。子ノードは複数の場所で使用できるため、ツリーとは少し異なります。
A A
/\ /\
B C B C
/\/\ /\ \
D E F D E |
\ |
F
EとFが複数のレイヤーで複数回使用されているにもかかわらず、これらの両方が許容されます。ノードは複数の親と複数の子を持つことができますが、必ずしもそれ自身の祖先である必要はありません。
しかし
A
|
B
|
A
|
...
が原因でループの許容されていません。
私の図書館に1サイクルのグラフが与えられていたら、図書館に悪いことが起こりますので、入力を正確にチェックする方法を探しています。私はこの構造を介して再帰が終了するか、無限ループに陥るかどうかを判断する必要があります。実際には、有向グラフでサイクルを探す必要があります。
はhttps://en.wikipedia.org/wiki/Topological_sorting – user58697
あなたの要件はOOでの継承のようなものですが、複数の親で、私はそれがグラフにサイクルを検出するよりもわずかに違う意味を参照してください。 –
複数の継承を持つサイクルを検出したり、インタフェースの継承でサイクレットを検出したりするのと同じです。私は前にそれを知らなかった。コンパイラがこれをどのように検出するかを知っていれば興味深いでしょう。 –