图搜索算法详解与示例代码

在计算机科学领域,图搜索算法是一类用于在图数据结构中查找特定节点或路径的算法。图搜索算法在许多领域都有着广泛的应用,包括网络路由、社交网络分析、游戏开发等。本文将详细介绍几种常见的图搜索算法,包括深度优先搜索(DFS)、广度优先搜索(BFS),并提供Python示例代码。后面再介绍Dijkstra算法和A*算法。

  1. 深度优先搜索(DFS)
    深度优先搜索是一种经典的图搜索算法,它通过递归或栈来实现。DFS从起始节点开始,沿着一条路径一直向下搜索直到无法继续,然后回溯到前一个节点继续搜索。DFS常用于解决图中的连通性问题,如判断图是否连通、查找图中的环等。
python 复制代码
from collections import defaultdict

class Graph:
    def __init__(self):
        self.graph = defaultdict(list)

    def add_edge(self, u, v):
        self.graph[u].append(v)

    def dfs_util(self, v, visited, target, path):
        visited[v] = True
        path.append(v)

        if v == target:
            print("DFS Path:", path)
        else:
            for i in self.graph[v]:
                if not visited[i]:
                    self.dfs_util(i, visited, target, path)

        path.pop()
        visited[v] = False

    def dfs(self, start, target):
        visited = [False] * (max(self.graph) + 1)
        path = []
        self.dfs_util(start, visited, target, path)

# 创建图实例
g = Graph()
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)
g.add_edge(2, 0)
g.add_edge(2, 3)
g.add_edge(3, 3)

start_node = 2
target_node = 3

print("Starting from node", start_node)
print("Searching for node", target_node)

# 使用DFS算法搜索路径
g.dfs(start_node, target_node)
  1. 广度优先搜索(BFS)
    广度优先搜索是另一种常见的图搜索算法,它通过队列来实现。BFS从起始节点开始,依次将其相邻的节点加入队列,并逐层向外扩展搜索,直到找到目标节点或队列为空。BFS通常用于求解最短路径等问题。
python 复制代码
from collections import defaultdict

class Graph:
    def __init__(self):
        self.graph = defaultdict(list)

    def add_edge(self, u, v):
        self.graph[u].append(v)

    def bfs(self, start, target):
        visited = [False] * (max(self.graph) + 1)
        queue = []
        path = []

        queue.append(start)
        visited[start] = True

        while queue:
            s = queue.pop(0)
            path.append(s)

            if s == target:
                print("BFS Path:", path)
                break

            for i in self.graph[s]:
                if not visited[i]:
                    queue.append(i)
                    visited[i] = True

# 创建图实例
g = Graph()
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)
g.add_edge(2, 0)
g.add_edge(2, 3)
g.add_edge(3, 3)

start_node = 2
target_node = 3

print("Starting from node", start_node)
print("Searching for node", target_node)

# 使用BFS算法搜索路径
g.bfs(start_node, target_node)

通过以上示例代码,我们展示了如何使用DFS和BFS算法在图中搜索从起始节点到目标节点的路径。这两种算法在不同情况下有着不同的应用,可以根据具体问题的需求选择合适的算法。

相关推荐
xvhao20131 天前
单源、多源最短路
数据结构·c++·算法·深度优先·动态规划·图论·图搜索算法
ambition202421 个月前
【算法详解】飞机降落问题:DFS剪枝解决调度问题
c语言·数据结构·c++·算法·深度优先·图搜索算法
im_AMBER1 个月前
Leetcode 152 被围绕的区域 | 岛屿数量
数据结构·算法·leetcode·深度优先·广度优先·图搜索算法
ZoeJoy81 个月前
算法筑基(八):数学算法——程序背后的数理根基
算法·贪心算法·排序算法·动态规划·图搜索算法
ZoeJoy81 个月前
算法筑基(六):分治算法——大事化小,小事化了
算法·排序算法·动态规划·哈希算法·图搜索算法
ZoeJoy81 个月前
算法筑基(二):搜索算法——从线性查找到图搜索,精准定位数据
算法·哈希算法·图搜索算法
未来转换1 个月前
Java 21 + Spring Boot + Elasticsearch 8.10 实现语义搜索
java·开发语言·spring boot·后端·elasticsearch·ai·图搜索算法
落地加湿器2 个月前
Acwing算法课图论与搜索笔记
c++·笔记·算法·图论·dfs·bfs·图搜索算法
电商API&Tina2 个月前
1688跨境寻源通API数据采集: 获得1688商品详情关键字搜索商品按图搜索1688商品
大数据·前端·数据库·人工智能·爬虫·json·图搜索算法
We་ct2 个月前
LeetCode 212. 单词搜索 II:Trie+DFS 高效解法
开发语言·算法·leetcode·typescript·深度优先·图搜索算法·图搜索