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
pszeudo-kód megtalálásához zárt pályák egy gráf
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.
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.
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













