图算法是计算机科学中用于处理图数据结构的一类算法。以下是一些常见的图算法及其实现:

深度优先搜索 (DFS)

深度优先搜索是一种用于遍历或搜索树或图的算法。以下是一个使用 Python 实现的 DFS 算法示例:

def dfs(graph, start):
    visited = set()
    stack = [start]

    while stack:
        vertex = stack.pop()
        if vertex not in visited:
            visited.add(vertex)
            stack.extend(graph[vertex] - visited)
    return visited

广度优先搜索 (BFS)

广度优先搜索是一种用于遍历或搜索树或图的算法。以下是一个使用 Python 实现的 BFS 算法示例:

from collections import deque

def bfs(graph, start):
    visited = set()
    queue = deque([start])

    while queue:
        vertex = queue.popleft()
        if vertex not in visited:
            visited.add(vertex)
            queue.extend(graph[vertex] - visited)
    return visited

最短路径算法 (Dijkstra)

Dijkstra 算法用于找到图中两点之间的最短路径。以下是一个使用 Python 实现的 Dijkstra 算法示例:

import heapq

def dijkstra(graph, start):
    distances = {vertex: float('infinity') for vertex in graph}
    distances[start] = 0
    priority_queue = [(0, start)]

    while priority_queue:
        current_distance, current_vertex = heapq.heappop(priority_queue)
        for neighbor, weight in graph[current_vertex].items():
            distance = current_distance + weight
            if distance < distances[neighbor]:
                distances[neighbor] = distance
                heapq.heappush(priority_queue, (distance, neighbor))
    return distances

生成树算法 (Prim)

Prim 算法用于找到图中的最小生成树。以下是一个使用 Python 实现的 Prim 算法示例:

import heapq

def prim(graph):
    visited = set()
    min_heap = [(0, 0)]  # (weight, vertex)
    total_weight = 0
    edges = []

    while min_heap:
        weight, vertex = heapq.heappop(min_heap)
        if vertex in visited:
            continue
        visited.add(vertex)
        total_weight += weight
        for neighbor, edge_weight in graph[vertex].items():
            if neighbor not in visited:
                heapq.heappush(min_heap, (edge_weight, neighbor))
                edges.append((vertex, neighbor, edge_weight))
    return total_weight, edges

更多关于图算法的细节和实现,您可以访问本站图算法教程

图片

Graph Data Structure