Przeszukanie grafu w głąb

0

Witam. Mam wierzchołki 0,1,...,8
Muszę utworzyć graf łącząc krawędziami wierzchołki parzyste z parzystymi oraz nieparzyste z nieparzystymi. (narysowałem graf i wrzucam go w załączniku)
Gdy już utworzyłem graf to muszę przejść go w głąb.
i teraz nie wiem czy dobrze myślę:
a)Za wierzchołek startowy uznaję wierzchołek 0 i oznaczam go jako odwiedzony.
b)Sąsiadami wierzchołka 0 jest 2,4,6,8(dodaje je na stos), więc idziemy do wierzchołka 8, który jeszcze nie był odwiedzony
c)Sąsiadami wierzchołka 8 jest 0,2,4,6(dodaje na stos te, które nie były odwiedzone jeszcze i mam 2,4,6,2,4,6), pobieram ostatni wierzchołek czyli 6, który nie był jeszcze odwiedzony
d)Sąsiadami wierzchołka 6 jest 0,2,4,8(dodaje na stos te, które nie były odwiedzone jeszcze i mam 2,4,2,4), pobieram ostatni wierzchołek czyli 4, który nie był jeszcze odwiedzony
e)Sąsiadami wierzchołka 4 jest 0,2,6,8(dodaje na stos, te które nie były odwiedzone jeszcze i mam(2,2,2), pobieram ostatni wierzchołek, czyli 2, który nie był jeszcze odwiedzony
f)Sąsiadami wierzchołka 2 jest 0,4,6,8, ale wszystkie zostały odwiedzone, więc moje przejście w głąb wygląda tak:
0-8-6-4-2
Czy moje przejście jest poprawne?
Co z tą drugą częścią grafu? Przechodzę ją oddzielnie, czy odpuszczam i przejście grafu w głąb kończy się, gdy odwiedzę 0-8-6-4-2?
Jeśli bym miał wierzchołek startowy w drugiej części grafu(wierzchołki nieparzyste), to wtedy w głąb przejście zakończyłoby się na odwiedzeniu wszystkich wierzchołków tego grafu, pomijając część pierwszą?

1
  1. To zależy co chcesz osiagnąć.
  2. Wierzchołek początkowy może być dowolny
  3. Jeśli chcesz odwiedzić wszystkie węzły, to po prostu wybierasz losowy nieodwiedzony wierzchołek jak ci się w podgrafie skończyły i powtarzasz aż nie odwiedzisz wszystkiego
0

To co robisz nie jest przeszukiwaniem w głąb.

0

Co Uważasz za "przeszukiwanie w głąb", jeśli DFS (Depth First Search), to:

def dfs(g, v):
    if g.is_marked(v) is False:
        g.mark(v)
        for w in g.adj_list(v):
            dfs(g, w)

Zadziała, jak w język, którego Używasz ma rekurencję.

0

@Shalom: Ups, nie zadałem soie trudu popatrzenia na załącznik. Tak, dfs zwraca tylko tzw. "connected components".
@div9: W Twoim przypadku, graf jest niespójny, więc jakiekolwiek "search" (dfs, bfs, afs), przeszuka tylko jedną część. Jak Chcesz przejść po całym grafie, to na dwa razy.

0

Wszystko zależy od tego co chcesz osiągnąć.
Jeśli graf jest niespójny i chcesz przejść BFS/DFSem przez wszystkie wierzchołki tylko po to żeby je przejść, to możesz np. w pętli dla każdego wierzchołka wywołać BFS/DFS rozpoczynający się w tym wierzchołku, nie resetując tablicy z informacją o odwiedzonych. Zamortyzowana złożoność to nadal O(n+m) (gdzie n to ilość wierzchołków, m ilość krawędzi).
W przeciwnym wypadku - jeśli puścisz BFS/DFS tylko z jednego miejsca, dotrze on tylko tam dokąd są ścieżki - czyli niekoniecznie całego grafu

1 użytkowników online, w tym zalogowanych: 0, gości: 1