Изучение различных методов поиска в ширину в неориентированных графах

Поиск в ширину (BFS) – это фундаментальный алгоритм обхода графа, используемый для эффективного исследования или поиска в графе. В этой статье мы углубимся в несколько методов выполнения BFS на неориентированных графах. Мы предоставим примеры кода независимо от языка, что позволит вам реализовать эти алгоритмы на предпочитаемом вами языке программирования.

Метод 1: использование списка смежности
Наиболее распространенный способ представления неориентированного графа — использование списка смежности. Вот пример реализации BFS с использованием списка смежности:

from collections import deque
def bfs(graph, start_vertex):
    visited = set()
    queue = deque([start_vertex])
    visited.add(start_vertex)
    while queue:
        vertex = queue.popleft()
        print(vertex)  # Example: Print the visited vertex
        for neighbor in graph[vertex]:
            if neighbor not in visited:
                queue.append(neighbor)
                visited.add(neighbor)

Метод 2: использование матрицы смежности
Другой подход заключается в использовании матрицы смежности для представления неориентированного графа. Вот пример реализации BFS с использованием матрицы смежности:

from collections import deque
import numpy as np
def bfs(graph, start_vertex):
    num_vertices = graph.shape[0]
    visited = set()
    queue = deque([start_vertex])
    visited.add(start_vertex)
    while queue:
        vertex = queue.popleft()
        print(vertex)  # Example: Print the visited vertex
        for neighbor in range(num_vertices):
            if graph[vertex, neighbor] != 0 and neighbor not in visited:
                queue.append(neighbor)
                visited.add(neighbor)

Метод 3: оптимизация BFS с использованием очереди и посещаемого массива
В сценариях, где память имеет значение, мы можем оптимизировать алгоритм BFS, используя очередь и посещаемый массив. Вот пример реализации:

from collections import deque
def bfs(graph, start_vertex):
    num_vertices = len(graph)
    visited = [False] * num_vertices
    queue = deque([start_vertex])
    visited[start_vertex] = True
    while queue:
        vertex = queue.popleft()
        print(vertex)  # Example: Print the visited vertex
        for neighbor in graph[vertex]:
            if not visited[neighbor]:
                queue.append(neighbor)
                visited[neighbor] = True

Поиск в ширину – это мощный алгоритм исследования неориентированных графов. В этой статье мы обсудили три метода реализации BFS: использование списка смежности, матрицы смежности и оптимизированный подход с использованием очереди и посещенного массива. Эти методы обеспечивают различные компромиссы с точки зрения использования памяти и сложности реализации. Понимая эти методы, вы будете хорошо подготовлены к эффективному перемещению по неориентированным графам в своих проектах программирования.