Muszę matrycę adjaceny na wykresie, które śledzi krawędzie między węzłami o o 1 w odpowiednim adjMat [i, j] = 1; Przez tę matrycę adjaceny i chcą uzyskać wszystkie zamknięte ścieżki o długości 4, który występuje w wykresie. Może ktoś proszę podać mnie z pseudo kod. Dziękuję
pseudokod znalezienia zamkniętej ścieżki na wykresie
Nałożyć depth-first-przeszukiwanie ograniczone do głębokości każdy węzeł i węzły płytowych gdzie DFS znajdzie węzeł początkowy. Do poszukiwań zobaczyć pseudo-kod tutaj: http://en.wikipedia.org/wiki/Depth-limited_search . Trzeba tylko dodać coś takiego
if(node' == node && node'.depth==4) memorize(node)
do początku pętli.
To brzmi jak praca domowa, więc nie dam całość dalej. Ale oto wskazówka: skoro jesteś zainteresowany znalezieniem cykle długości 4, podjąć 4th moc macierz sąsiedztwa i skanowanie wzdłuż przekątnej. Jeśli dowolny wpis K [i, j] jest niezerowe, to jest cykl zawierający wierzchołek i.
Może to nie jest optymalnym sposobem na to (to obliczyć O(n^4)), ale bardzo prosty sposób jest skanowanie przez wszystkie wierzchołki
a, b, c, d such that b > a, c > b, d > c
Można sprawdzić, a następnie sprawdzić dla każdego z następujących cyklach:
1. ([a, b] && [b, d] && [c, d] && [D, A]) 2. ([a, b] && [b, d] && [D, C] && [c a]) 3. ([a, d] && [d b] && [b, d] && [c a]) 1: 2: 3: A --- B A --- BAB | | \ / | \ / | | | X | X | | | / \ | / \ | D C D --- --- CCD
Jesteś w zasadzie sprawdzenie każdej uporządkowany zbiór wierzchołków (a, b, c, d) do 3 sposoby, które mogą oni tworzą cykl.
Więc pseudo kod byłoby:
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













