cod pseudo pentru a găsi căi închise într-un grafic

voturi
-1

Am o matrice adjaceny pentru un grafic care urmărește marginile dintre nodurile având un 1 în adjMat corespunzătoare [i, j] = 1; Prin această matrice adjaceny Aș dori să găsesc toate căile închise de lungime 4, care există în grafic. Poate cineva vă rugăm să-mi ofere un cod pseudo. mulțumesc

Întrebat 14/03/2009 la 20:38
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
0

Aplicați o adancime-căutare profunzime limitat la fiecare nod și nodurile de înregistrare în cazul în care DFS găsește nodul de pornire. Pentru căutare, vezi pseudo-cod aici: http://en.wikipedia.org/wiki/Depth-limited_search . Trebuie doar să adăugați ceva de genul

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

la începutul buclei.

Publicat 14/03/2009 la 20:56
sursa de către utilizator

voturi
2

Acest lucru sună ca temele, așa că nu voi da totul departe. Dar aici e un indiciu: din moment ce sunteți interesat în găsirea de cicluri de lungime 4, ia patra putere a matricei de adiacenta și scanare de-a lungul diagonală. Dacă orice intrare M [i, i] este nenul, există un nod ciclu care conține i.

Publicat 14/03/2009 la 20:57
sursa de către utilizator

voturi
1

Poate că nu este modul optim de a - l (este calcula O(n^4)), dar un mod foarte simplu se scanează prin toate nodurile

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

Puteți verifica apoi verificați pentru fiecare dintre următoarele cicluri:

 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

Ai verificat practic fiecare set ordonat de noduri (a, b, c, d) pentru cele 3 moduri în care acestea ar putea forma un ciclu.

Deci, codul pseudo ar fi:

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
Publicat 14/03/2009 la 21:15
sursa de către utilizator

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