Mám adjaceny matrici pro graf, který sleduje hrany mezi uzly tím, že má 1 v odpovídajícím adjMat [i, j] = 1; Prostřednictvím tohoto adjaceny matice Přál bych si zjistit všechny uzavřené dráhy o délce 4, která existuje v grafu. Mohl by někdo prosím poskytnout mi s pseudokódu. Děkuji
pseudo kód pro nalezení uzavřené cesty v grafu
Aplikovat hloubku omezené hloubky-vyhledávání na každý uzel a spisové uzlů, kde DFS zjistí počáteční uzel. Pro vyhledávání, viz pseudo-kód zde: http://en.wikipedia.org/wiki/Depth-limited_search . Jen je třeba přidat něco podobného
if(node' == node && node'.depth==4) memorize(node)
na začátek smyčky.
Zní to jako domácí úkol, takže nebudu dávat celou věc pryč. Ale tady je tip: protože jste-li zájem dozvědět cykly o délce 4, přijmou 4. sílu matice přilehlosti a skenování podél úhlopříčky. Pokud některý vstup M [i, j] je různé od nuly, je vrchol cyklus obsahující i.
Možná, že to není optimální způsob, jak jej (je to spočítat O(n^4)), ale je to velmi jednoduchý způsob, jak je skenování přes všechny vrcholy
a, b, c, d such that b > a, c > b, d > c
Můžete zkontrolovat a pak zkontrolovat každý z následujících cyklů:
1. ([a, b] && [b, c] && [c, d] && [d, a]) 2. ([a, b] && [b, d] && [d, c] && [c, a]) 3. ([a, d] && [d, b] && [b, c] && [c, a]) 1: 2: 3: --- B A --- BAB | | \ / | \ / | | | X | X | | | / \ | / \ | D --- C D --- CCD
Vy jste v podstatě kontrolovat každou uspořádanou množinu vrcholů (a, b, c, d) pro 3 způsoby, které by mohly tvořit cyklus.
Takže pseudo kód bude vypadat následovně:
for a = 0 to <lastVertex>
for b = a + 1 to <lastVertex>
for c = b + 1 to <lastVertex>
for d = c + 1 to <lastVertex>
if(IsCycle(a,b,c,d)) AddToList([a,b,c,d])
if(IsCycle(a,b,d,c)) AddToList([a,b,d,c])
if(IsCycle(a,c,b,d)) AddToList([a,c,b,d])
next d
next c
next b
next a













