Yönlendirilmiş Bir Grafikte Basit Çevrimleri Bulma


15

Bu sorun benim için çok ilginç görünüyor. Yönlendirilmiş bir grafikte basit bir döngü (yani tekrar düğümleri olmayan döngü) bulmak üzereydi.

Benim çözümüm böyle gidiyor, yani, bu grafik bir vaka problemi: resim açıklamasını buraya girin

Bir grafikte bir döngü olduğunu biliyorum, bir derinlik-ilk aramada (arka taraftaki resmi) (DFSTree'deki resmimde kesikli) bulabildiğinizde ve bir an için birkaç döngü için emin olabilirim, ancak hepsi, basit döngüler. Çünkü, yönlendirilmiş egdes döngüden çok önemlidir, yani (0123)! = (0321)

Ben arka kenarları ile her düğüm için bir dfs yapmak düşünüyorum, ama emin değilim, ve net değil. Bana sorarsan, bana rehberlik edersen. Teşekkürler!. resim açıklamasını buraya girin

İşte benim durum problemim için basit döngüler.

resim açıklamasını buraya girin resim açıklamasını buraya girinresim açıklamasını buraya girin resim açıklamasını buraya girin resim açıklamasını buraya girin resim açıklamasını buraya girin


Yanıtlar:


13

Bu soru çok Googleable gibi görünüyor. Örneğin, bu makalede sunulan algoritma ile ilgilenebilirsiniz:

Yönlendirilmiş bir grafiğin tüm temel devrelerini bulma . Donald B. Johnson. SIAM J. COMPUT. Vol. 1, 4 Mart 1975

Öz. Bir algoritma, her temel tarafından sınırlanan zaman içinde yönlendirilmiş grafiğin devreleri-bulur sunulmuştur O((n + e)(c + 1))ile sınırlanan ve boşluk O(n + e)vardır, nözet olarak, ekenarlar ve cgrafikte temel devreleri. Algoritma Tiernan ve Tarjan'ın algoritmalarına benzer, ancak daha hızlıdır, çünkü her bir kenarı herhangi bir devre ve çıkış dizisinde bir sonraki arasında en fazla iki kez dikkate alır.

Kağıt tam bir algoritma içeriyor.


Tamam. Kağıt mükemmel, ama işimle herhangi bir yere gidebilir miyim, ya da sadece kağıda bakabilir miyim? Seni çözümle tanıştırmaya çalışıyordum, fikrimle neyi unutuyorum?
jonaprieto

2
Ana sorununuz dfs ağacının benzersiz olmamasıdır (örneğin, "1" i şemanızda "3" ile değiştirin). Tüm döngüleri numaralandırmak için olası tüm dfs ağaçlarına bakmanız gerekir.
badroit

1
Bu algoritmanın Java uygulamasına ihtiyacınız varsa: github.com/1123/johnson
user152468

@badroit bağlantı koptu ... :(
Jorge E. Hernández

@lalongooo, teşekkürler evet, ben değiştirdim.
badroit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.