pseudo-kode for å finne lukkede baner i en graf

stemmer
-1

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

Publisert på 14/03/2009 klokken 19:38
kilden bruker
På andre språk...                            


3 svar

stemmer
0

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.

Svarte 14/03/2009 kl. 19:56
kilden bruker

stemmer
2

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.

Svarte 14/03/2009 kl. 19:57
kilden bruker

stemmer
1

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
Svarte 14/03/2009 kl. 20:15
kilden bruker

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