当前位置: 首页 > news >正文

图论入门【数据结构基础】:什么是图?如何表示图?

图(Graph) 是一种非线性数据结构,用于表示对象之间的关系。图由 顶点(Vertex)边(Edge) 组成,其中顶点表示对象,边表示对象之间的关系。图广泛应用于计算机科学、数学、物理、生物、社交网络等领域。

文章目录

  • 1. 图的基本概念
  • 2. 图的分类
    • 按边是否有方向
    • 按边是否有权重
    • 按图中是否有环
    • 按图的连通性
  • 3. 图的表示方法
  • 4. 图的算法

1. 图的基本概念

  • 顶点(Vertex):也称为节点(Node),表示图中的对象。例如,在社交网络中,顶点可以表示人。
  • 边(Edge):表示顶点之间的关系。例如,在社交网络中,边可以表示两个人是朋友。
  • 有向图(Directed Graph):边有方向,表示从一个顶点指向另一个顶点。例如,A → B 表示从 A 到 B 的关系。
  • 无向图(Undirected Graph):边没有方向,表示两个顶点之间的双向关系。例如,A — B 表示 A 和 B 是相互关联的。
  • 权重(Weight):边可以带有权重,表示关系的强度或成本。例如,在地图中,边的权重可以表示两个城市之间的距离。

2. 图的分类

按边是否有方向

  • 有向图(Directed Graph)
    • 边有方向,表示为 ( u , v ) (u,v) (u,v),表示从顶点 u u u 指向顶点 v v v
    • 示例:网页链接(A 页面链接到 B 页面)。
  • 无向图(Undirected Graph)
    • 边没有方向,表示为 u , v {u,v} u,v,表示顶点 u u u 和顶点 v v v 之间的双向关系。
    • 示例:社交网络(A 和 B 是朋友)。

按边是否有权重

  • 带权图(Weighted Graph)
    • 边带有权重,表示关系的强度或成本。
    • 示例:地图(边的权重表示两个城市之间的距离)。
  • 无权图(Unweighted Graph)
    • 边没有权重,只表示顶点之间是否存在关系。
    • 示例:社交网络(只表示两个人是否是朋友)。

按图中是否有环

  • 有环图(Cyclic Graph)
    • 图中存在至少一个环(从一个顶点出发,经过若干边后回到自身)。
    • 示例: A → B → C → A A → B → C → A ABCA
  • 无环图(Acyclic Graph)
    • 图中不存在任何环。
    • 示例:树(Tree) 是一种特殊的无环图。

按图的连通性

  • 连通图(Connected Graph)
    • 无向图中,任意两个顶点之间都存在路径。
    • 示例:完全连通的社交网络。
  • 非连通图(Disconnected Graph)
    • 无向图中,存在至少两个顶点之间没有路径。
    • 示例:孤立的社交网络群体。
  • 强连通图(Strongly Connected Graph)
    • 有向图中,任意两个顶点之间都存在双向路径。
    • 示例:完全连通的网页链接图。

3. 图的表示方法

图可以通过多种方式表示,常见的有:

  • 邻接矩阵(Adjacency Matrix)
    • 使用二维数组表示顶点之间的连接关系。
    • 适合稠密图。
  • 邻接表(Adjacency List)
    • 使用数组或链表存储每个顶点的邻接顶点。
    • 适合稀疏图。
  • 边列表(Edge List)
    • 直接存储所有边的列表。
    • 适合某些特定算法(如 Kruskal 算法)。

4. 图的算法

图论中有许多经典算法,例如:

  • 遍历算法
    • 深度优先搜索(DFS):用于遍历或搜索图。
    • 广度优先搜索(BFS):用于最短路径问题。
  • 最短路径算法
    • Dijkstra 算法:用于带权图的最短路径。
    • Floyd-Warshall 算法:用于所有顶点对之间的最短路径。
  • 最小生成树算法
    • Kruskal 算法:基于边列表的最小生成树。
    • Prim 算法:基于顶点的最小生成树。
  • 拓扑排序
    • 用于 有向无环图(DAG) 的排序。
  • 强连通分量
    • Kosaraju 算法:用于查找有向图的强连通分量。

我将在接下来几篇文章中和大家分享相关的题目。欢迎大家点赞收藏,持续关注!

相关文章:

  • Linux IP 配置
  • 完全托管的DeepSeek-R1模型正式登陆Amazon Bedrock:安全部署与使用指南
  • 【系统架构设计师】操作系统 - 文件管理 ② ( 位示图 | 空闲区域 管理 | 位号 | 字号 )
  • Flask 模版引擎的语法
  • C语言-自定义类型:联合和枚举
  • OpnenHarmony 开源鸿蒙北向开发——1.开发环境搭建(DevEco Studio 5.03)
  • 高主频GPU+RTX4090:AI生图性能优化超150%
  • GIT标签(Tag)操作
  • Cursor与Coze结合开发电影推荐系统:一次高效的技术实践
  • 数据结构——串、数组和广义表
  • golang开发支持onlyoffice的token功能
  • 自定义uniapp组件,以picker组件为例
  • SpringBoot第三站:配置嵌入式服务器使用外置的Servlet容器
  • SQL注入第7关
  • DNS主从服务器
  • 【第K小数——可持久化权值线段树】
  • IIS 服务器日志和性能监控
  • 蓝桥杯嵌入式赛道复习笔记2(按键控制LED灯,双击按键,单击按键,长按按键)
  • element-plus中Popconfirm气泡确认框组件的使用
  • 基于 Docker 和 Flask 构建高并发微服务架构
  • 全国台联原会长杨国庆逝世,享年89岁
  • 市场监管总局出手整治涉企乱收费,聚焦政府部门及下属单位等领域
  • 鲁迅先生儿媳、周海婴先生夫人马新云女士逝世,享年94岁
  • 中央宣传部、全国总工会联合发布2025年“最美职工”先进事迹
  • 最高法强化涉新就业形态民事案件审判指导:推动出台司法解释
  • 马上评丨准入壁垒越少,市场活力越足