pseudo kód pro nalezení uzavřené cesty v grafu

hlasů
-1

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

Položena 14/03/2009 v 20:38
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
0

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.

Odpovězeno 14/03/2009 v 20:56
zdroj uživatelem

hlasů
2

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.

Odpovězeno 14/03/2009 v 20:57
zdroj uživatelem

hlasů
1

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
Odpovězeno 14/03/2009 v 21:15
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more