pszeudo-kód megtalálásához zárt pályák egy gráf

szavazat
-1

Van egy adjaceny mátrixot egy grafikon, amely nyomon követi a szélek közötti csomópontok azáltal, hogy egy 1 a megfelelő adjMat [i, j] = 1; Ezzel adjaceny mátrix i szeretne megtudni a zárt pályák hossza 4, amely létezik a grafikonon. Tud valaki kérem, adj meg egy pszeudo kódot. köszönöm

A kérdést 14/03/2009 20:38
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
0

Alkalmazza a mélysége korlátozott mélységi-keresés minden csomópont és rekord csomópontok, ahol a DFS találja a kiindulási csomópont. A keresési lásd pszeudo-kód van: http://en.wikipedia.org/wiki/Depth-limited_search . Akkor csak kell hozzá valami hasonló

if(node' == node && node'.depth==4) memorize(node)

A ciklus kezdetén.

Válaszolt 14/03/2009 20:56
a forrás felhasználó

szavazat
2

Ez úgy hangzik, mint a házi feladatot, így nem adom az egészet el. De itt van egy tipp: mivel érdekli állapította ciklusok hossza 4, hogy a 4. hatalom a szomszédsági mátrix és a szkennelés az átló mentén. Ha bármely bejegyzés M [i, i] nem nulla, van egy ciklus tartalmazó csúcsot i.

Válaszolt 14/03/2009 20:57
a forrás felhasználó

szavazat
1

Talán nem ez a legjobb módja annak, hogy kiszámítania (ez O(n^4)), hanem egy nagyon egyszerű módja van beolvasni az összes csúcsot

a, b, c, d such that b > a, c > b, d > c

Meg tudja nézni, akkor ellenőrizze az egyes alábbi ciklusok mellett:

 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:
 A --- B A --- BAB
 | | \ / | \ / |
 | | X | X |
 | | / \ | / \ |
 D --- C D --- CCD

Te alapvetően ellenőrizve minden megrendelt csúcsok halmaza (a, b, c, d) a 3. módon tudtak alkotnak ciklust.

Tehát a pszeudo-kód lenne:

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
Válaszolt 14/03/2009 21:15
a forrás felhasználó

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