この例では、tsortがループを報告しないのはなぜですか?

この例では、tsortがループを報告しないのはなぜですか?

次の例では、tsortはどのように順序を見つけますか?

この例では、tsortがループを報告しないのはなぜですか?

$ tsort <<EOF
a b c d c b a b
EOF

a
c
b
d

そしてこれはどうですか?ありがとうございます。

$ tsort <<EOF
a b c d d c b a
EOF

tsort: -: input contains a loop:
tsort: a
tsort: b
a
b
tsort: -: input contains a loop:
tsort: c
tsort: d
c
d

ベストアンサー1

最初の入力にはループはありません。分析してみましょう。

a b c d c b a b

またはペアで配置します。

  • a < b
  • c<d
  • c<b
  • a < b (これは2回指定されます!)

したがって、「a」と「c」は両方とも「b」の前に来、「c」は「d」の前に来ます。しかし、そこにはループはありません!

ただし、2番目の例には、a < b、b < a(ループ!)とc < d、d < c(ループ!)という2つの直接ループがあります。

これをダイアグラムに入れて視覚化すると(このdotプログラムを確認することをお勧めします)、これらのループを簡単に視覚化するのに役立ちます!

おすすめ記事