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
cod pseudo pentru a găsi căi închise într-un grafic
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.
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.
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













