BFS (Breadth-First Search) to algorytm przeszukiwania grafów, który przeszukuje graf warstwami, zaczynając od węzła początkowego i eksplorując wszystkie jego sąsiednie węzły przed przejściem do węzłów następnej warstwy. BFS jest szczególnie użyteczny do znajdowania najkrótszej ścieżki w grafach nieskierowanych, gdzie wszystkie krawędzie mają tę samą wagę.
Algorytm BFS
Inicjalizacja:
- Dodaj węzeł początkowy do kolejki.
- Oznacz węzeł początkowy jako odwiedzony.
Proces przeszukiwania:
- Dopóki kolejka nie jest pusta:
- Usuń węzeł z początku kolejki.
- Przeszukaj sąsiednie węzły.
- Dodaj nieodwiedzone sąsiednie węzły do kolejki i oznacz je jako odwiedzone.
- Dopóki kolejka nie jest pusta:
Implementacja algorytmu BFS w programie Python
Poniżej znajduje się implementacja BFS dla grafu reprezentowanego jako lista sąsiedztwa.
from collections import deque
def bfs(graph, start):
visited = set()
queue = deque([start])
visited.add(start)
while queue:
vertex = queue.popleft()
print(vertex, end=" ")
# Można zmienić na inną operację, np. zapisywanie do listy
for neighbor in graph[vertex]:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
# Przykładowy graf jako lista sąsiedztwa
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F'],
'F': ['C', 'E']
}
# Wywołanie BFS
bfs(graph, 'A')
przy czym deque to zoptymalizowana dwukierunkowa kolejka, która pozwala na szybkie dodawanie i usuwanie elementów z obu końców.
Przykład użycia
Graf
A - B - D
| |
C E
\ /
F
Wywołanie bfs(graph, 'A') przeszuka graf w następującej kolejności: A B C D E F.
BFS jest powszechnie używany w wielu zastosowaniach, takich jak:
- znajdowanie najkrótszej ścieżki w grafie nieskierowanym.
- rozwiązywanie problemów związanych z przeszukiwaniem w szerz, takich jak znajdowanie wszystkich połączeń w sieci.
- algorytmy sztucznej inteligencji i grafiki komputerowej.
Komentarze