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

server/2024/9/23 1:02:08/

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

  1. 深度优先搜索(DFS)
    深度优先搜索是一种经典的图搜索算法,它通过递归或栈来实现。DFS从起始节点开始,沿着一条路径一直向下搜索直到无法继续,然后回溯到前一个节点继续搜索。DFS常用于解决图中的连通性问题,如判断图是否连通、查找图中的环等。
from collections import defaultdictclass 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] = Truepath.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] = Falsedef 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 = 3print("Starting from node", start_node)
print("Searching for node", target_node)# 使用DFS算法搜索路径
g.dfs(start_node, target_node)
  1. 广度优先搜索(BFS)
    广度优先搜索是另一种常见的图搜索算法,它通过队列来实现。BFS从起始节点开始,依次将其相邻的节点加入队列,并逐层向外扩展搜索,直到找到目标节点或队列为空。BFS通常用于求解最短路径等问题。
from collections import defaultdictclass 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] = Truewhile queue:s = queue.pop(0)path.append(s)if s == target:print("BFS Path:", path)breakfor 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 = 3print("Starting from node", start_node)
print("Searching for node", target_node)# 使用BFS算法搜索路径
g.bfs(start_node, target_node)

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


http://www.ppmy.cn/server/27499.html

相关文章

pymilvus执行多向量搜索

pymilvus执行多向量搜索 从 Milvus 2.4 开始,引入了多向量支持和混合搜索框架,单个collection可以支持10个向量字段。不同的向量字段可以表示不同的方面、不同的embedding模型甚至表征同一实体的不同数据模态。该功能在综合搜索场景中特别有用&#xff…

可重构柔性装配产线:AI边缘控制技术的崭新探索

在信息化和智能化浪潮的推动下,制造业正面临着前所未有的转型升级挑战。其中,可重构柔性装配产线以其独特的AI边缘控制技术,为制造业的智能化转型提供了新的解决方案。 可重构柔性装配产线是基于AI工业控制与决策平台打造的智能化生产系统。…

sql连续登录

1、sql建表语句 DROP TABLE IF EXISTS app_login_record; CREATE TABLE app_login_record (user_id int(0) NULL DEFAULT NULL,enter_time datetime(0) NULL DEFAULT NULL,leave_time datetime(0) NULL DEFAULT NULL );INSERT INTO app_login_record VALUES (789012, 2023-05-…

粤嵌gec6818开发板-播放视频、音频文件(管道文件控制)

前段时间做了一个项目,用到了linux环境下gec6818开发板播放视频、音频文件,在这里给大家分享一下。 这里使用的方法是利用mplayer播放器进行播放,首先先给开发板装上mplayer播放器,这里就不详细说明了。 我用的是管道文件来控制视…

【综述】多核处理器芯片

文章目录 前言 Infineon处理器 AURIX™系列 TC399XX-256F300S 典型应用 开发工具 参考资料 前言 见《【综述】DSP处理器芯片》 Infineon处理器 AURIX™系列,基于TriCore内核,用于汽车和工业领域。 XMC™系列,基于ARM Cortex-M内核&…

搭建vue3组件库(一): Monorepo架构搭建

文章目录 1. 以 pnpm 构建 monorepo1.1 全局安装 pnpm1.2 配置 pnpm 的 monorepo 工作区1.3 仓库项目内的包相互调用1.4 TypeScript 初始化配置文件 2. 通用配置文件2.1 添加 .editorconfig 编辑器格式配置文件2.2 添加 .gitignore git 忽略文件2.3 添加 .npmrc npm配置文件2.4…

数据结构(八)——排序

八、排序 8.1 排序的基本概念 排序(Sort),就是重新排列表中的元素,使表少的元素满足按关键字有序的过程。 输入∶n个记录R1,R2...., Rn,对应的关键字为k1, k2,... , kn 输出:输入序列的一个重排R1,R2....,Rn,使得有k1≤k2≤...≤…

Java设计模式 _结构型模式_过滤器模式

一、过滤器模式 1、过滤器模式 过滤器模式(Filter Pattern)是这一种结构型设计模式。过滤器,顾名思义,就是对一组数据进行过滤,从而最终获取到我们预期的数据。 2、实现思路 (1)、定义过滤器的…