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

图(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 算法:用于查找有向图的强连通分量。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用HACS一键集成米家与果家设备到HomeAssistant玩转智能家居

文章目录 前言1. 下载HACS源码2. 添加HACS商店3. 绑定米家设备 前言 各位科技潮人和智能家居发烧友们,是不是也梦想着把家里变成一个高科技的空间?有了群晖NAS这位得力助手,不仅存储空间大得吓人,还能通过Docker轻松安装各种应用…

《Java对象“比武场“:Comparable与Comparator的巅峰对决》

目录 引言: 一、认识接口 1.1 Comparable 1.2 Comparator ​编辑 1.3 核心概念对比 二、代码实现对比 2.1 Comparable 实现示例 2.2 Comparator 实例示例 三、核心区别详解 3.1 设计理念差异 3.2 方法调用 3.3 使用情景 四、本质区别总结 引言&#x…

Android自动化测试工具

细解自动化测试工具 Airtest-CSDN博客 以下是几种常见的Android应用自动化测试工具: Appium:支持多种编程语言,如Java、Python、Ruby、JavaScript等。可以用于Web应用程序和原生应用程序的自动化测试,并支持iOS和Android平台。E…

Go vs Rust vs C++ vs Python vs Java:谁主后端沉浮

一、核心性能对比(基于TechEmpower基准测试) 语言单核QPS延迟(ms)内存消耗适用场景Rust650,0000.1245MB高频交易/区块链C++720,0000.0932MB游戏服务器/实时渲染Go230,0000.45110MB微服务/API网关Java180,0001.2450MB企业ERP/银行系统Python12,0008.5220MBAI接口/快速原型技术…

vue3:八、登录界面实现-页面初始搭建、基础实现

一、初始工作 1、创建登录文件 在src/views中创建文件LoginView.vue文件 2、创建路由 在router/index.js中增加登录的信息 代码 import { createRouter, createWebHistory } from vue-router import HomeView from ../views/HomeView.vue const router createRouter({hist…

结构型模式之适配器模式:让不兼容的接口兼容

在软件开发中,经常会遇到这样一种情况:系统的不同部分需要进行交互,但由于接口不兼容,导致无法直接使用。这时,适配器模式(Adapter Pattern)就能派上用场。适配器模式是设计模式中的结构型模式&…

Qt从入门到入土(十) -数据库操作--SQLITE

认识 数据库是用于存储、管理和检索数据的系统化集合。它是一种按照特定结构组织数据的存储方式,通过软件(数据库管理系统,DBMS)来实现数据的高效存储、查询、更新和管理。通过文件存储数据适用于少量的数据,而当拥有…

Django REST Framework中的序列化器类和视图类

序列化器类 一、Serializer序列化类 Serializer是DRF的序列化器基类,提供基本功能,使用Serializer类需要自己定义字段名称和类型。 BookSerializer(Serializer):name serializers.CharField()price serlializers.IntegerField()date serlializers.…

图像分类数据集

《动手学深度学习》-3.5-学习笔记 # 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式, # 并除以255使得所有像素的数值均在0~1之间 trans transforms.ToTensor()#用于将图像数据从 PIL 图像格式(Python Imaging Library&#xff…

架构师面试(十五):熔断设计

问题 某电商平台经常需要在大促运营活动中暂停评论、退款等业务,基于服务治理的设计理念,我们需要对该电商平台微服务系统的【服务熔断】进行设计,对此下面描述中说法正确的有哪几项呢? A. 服务管控系统管理着平台中所有服务之间…

Ubuntu20.04安装运行DynaSLAM

目录 一、安装Anaconda 二、相关依赖库安装 1、boost安装 2、Eigen 3安装 3、opencv安装 4、Pangolin安装 三、配置Mask_RCNN环境 四、DynaSLAM编译 五、DynaSLAM运行 一、安装Anaconda 打开以下链接: Index of / 下载和自己系统匹配的安装包。这里下…

X86 RouterOS 7.18 设置笔记三:防火墙设置(IPV4)

X86 j4125 4网口小主机折腾笔记五:PVE安装ROS RouterOS X86 RouterOS 7.18 设置笔记一:基础设置 X86 RouterOS 7.18 设置笔记二:网络基础设置(IPV4) X86 RouterOS 7.18 设置笔记三:防火墙设置(IPV4) X86 RouterOS 7.18 设置笔记四…

从 YOLOv1 到 YOLOv2:目标检测的进化之路

引言 你有没有想过,当你用手机拍一张照片,里面的人、车、狗是怎么被自动识别出来的?这背后靠的就是目标检测技术。目标检测是计算机视觉中的一个重要领域,它不仅要回答“图片里有什么”,还要告诉你“这些东西在哪里”…

数据的存储---整型、浮点型

目录 一、整型在内存中的存储 1. 原码、反码、补码 2. 大端与小端 二、浮点数在内存中的存储 1.浮点数的存 2. 浮点数的取 3. 题目解析 一个变量的创建需要在内存中开辟空间,而开辟的空间大小是由数据类型决定的。下面我们就来讨论一下整型、浮点型在内存中的…

Java 大视界 -- Java 大数据在智能教育虚拟实验室建设与实验数据分析中的应用(132)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

⚡️Jolt -- 通过JSON配置来处理复杂数据转换的工具

简介:一个能够通过JSON配置(特定的语法)来处理复杂数据转换的工具。 比如将API响应转换为内部系统所需的格式,或者处理来自不同来源的数据结构差异。例如,将嵌套的JSON结构扁平化,或者重命名字段&#xff0…

47.全排列 II

47.全排列 II 力扣题目链接 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1]]示例 2: 输入:nums [1,2,3] 输出…

centos没有ll

vi /etc/bashrc alias ll‘ls -l’ source /etc/bashrc

04 1个路由器配置一个子网的dhcp服务

前言 这是最近一个朋友的 ensp 相关的问题, 这里来大致了解一下 ensp, 计算机网络拓扑 相关基础知识 这里一系列文章, 主要是参照了这位博主的 ensp 专栏 这里 我只是做了一个记录, 自己实际操作了一遍, 增强了一些 自己的理解 当然 这里仅仅是一个 简单的示例, 实际场景…

网络空间安全(31)安全巡检

一、定义与目的 定义: 安全巡检是指由专业人员或特定部门负责,对各类设施、设备、环境等进行全面或重点检查,及时发现潜在的安全隐患或问题。 目的: 预防事故发生:通过定期的安全巡检,及时发现并解决潜在的…