Jeg har en adjaceny matrise for en graf som sporer kantene mellom nodene ved å ha en en i tilsvarende adjMat [i, j] = 1; Gjennom denne adjaceny matrise jeg ønsker å finne ut alle de lukkede baner av lengde 4 som eksisterer i grafen. Kan noen vennligst gi meg med en pseudo-kode. takk
pseudo-kode for å finne lukkede baner i en graf
Påfør en dybde-begrenset dybde-først-søk til hver node og plate knutepunkter hvor den DFS finner startknutepunktet. For søk, se pseudo-koden her: http://en.wikipedia.org/wiki/Depth-limited_search . Du trenger bare å legge noe sånt
if(node' == node && node'.depth==4) memorize(node)
til begynnelsen av løkken.
Dette høres ut som lekser, så jeg vil ikke gi det hele bort. Men her er et hint: Siden du er interessert i å finne sykluser av lengde 4, ta fjerde makt nabomatrisen og skanne langs diagonalen. Hvis en hvilken som helst oppføring M [i, i] er forskjellig fra null, er det en syklus som inneholder toppunkt i.
Kanskje det ikke er den optimale måten å beregne det (det er O(n^4)), men en veldig grei måte er å skanne gjennom alle punktene
a, b, c, d such that b > a, c > b, d > c
Du kan sjekke deretter sjekke for hver av følgende sykluser:
1. ([a, b] && [b, c] && [c, d] && [d, a]) 2. ([a, b] && [b, d] && [d, c] && [c, a]) 3. ([a, d] && [d, f] && [b, c] && [c, a]) 1: 2: 3: A --- B A --- BAB | | \ / | \ / | | | X | X | | | / \ | / \ | D --- C D --- CCD
Du er i utgangspunktet sjekke hver beordret sett noder (a, b, c, d) for de 3 måter at de kunne danne en syklus.
Så pseudo-kode vil være:
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













