数据结构与算法(C++)– 图(Graph)

本文介绍了图论的基本概念,包括图的定义、类型及其关键属性,并详细探讨了两种主要的图表示方法:邻接矩阵与邻接表。此外,还介绍了图遍历算法——广度优先搜索(BFS)与深度优先搜索(DFS),并讨论了如何利用这些算法求解有向无权图的最短路径问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构与算法(C++)– 图(Graph)


1、图的基础概念

定义:一个图G=(V, E)由顶点(vertex)的集V和边(edge)的集E组成。

  • 边(edge):一对点即为一条边(v, w),其中v, w ∈ V
  • 有向图(directed):点对是有序的
  • 无向图(undirected):点对是无序的
  • 邻接(adjacent):w 邻接到 v,当且仅当(v, w )∈ E
  • 权(weight)/值(cost):边上的值
  • 路径(path):连通两点间的边
  • 长(lengh):路径上的边数
  • 简单路径(simple path):路径上的顶点都是互异的
  • 环(cycle):有向图中,首尾相连长度至少为1的简单路径。
  • 无环(acyclic):有向图中中没有环
  • 连通的(connected):无向图中每一个顶点到其它顶点都存在一条路径
  • 强连通的(strongly connected):有向图具有连通的性质
  • 基础图(underlying graph):无向图去掉边的方向
  • 弱连通的(connected):有向图的基础图是连通的
  • 完全图(complete graph):每一对顶点都存在一条边

几个关系:

  • n 个顶点的无向连通图,至少有 n-1 条边
  • n 个顶点的有向强连通图,至少有 n 条边
  • n 个顶点的无向完全图,有 n(n-1)/2 条边
  • n 个顶点的有向完全图,有 n(n-1) 条边

2、图的表示

图有两种表示方法:邻接矩阵,邻接表
这里写图片描述
邻接矩阵: 稠密(dense),复杂度为O(|V|^2)
这里写图片描述
邻接表: 稀疏(sparse),复杂度为O(|E| + |V|)
这里写图片描述


3、广度优先搜索(Breadth-first search,BFS)

定义: 按照由近到远的层进行搜索

实现: 使用队列(queue)结构实现。首先起点入队,队列出队一个元素,把邻接于该元素的所有顶点入队,循环直到队列为空即所有顶点都被访问过。
这里写图片描述
这里写图片描述


4、深度优先搜索(Depth-first search,DFS)

定义: 按照由深到浅的递归进行搜索

实现: 使用栈(stack)结构实现。首先起点入栈,出栈一个元素,把邻接于该元素的所有顶点入栈,循环直到栈为空即所有顶点都被访问过。

这里写图片描述

5、有向无权图的最短路径

实现: 使用广度优先搜索,复杂度为O(|E| + |V|)。

  1. 首先把起点的长(dv)设为0其它点的长设为∞
  2. 使用广度优先搜索算法更新点的dv值(邻接点+1),并记录更新点的父点(pv)
  3. 直到所有的点都被更新过,停止搜索
    这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值