数据结构和算法之图

news2025/1/19 8:24:14

什么是图

定义

包含

  • 1. 一组顶点:通常用V(Vertex)表示顶点集合
  • 2. 一组边:通常用E(Edge)表示边的集合
      1. 1. 边是顶点对:(v,w)属于E,其中v,w属于V
      2. 2. 有向边<v,w>表示从v指
      3. 3.不考虑重边和自回路

抽象数据类型定义

  • 1.类型名称:图(Graph)
  • 2. 数据对象集:G(V,E)由一个非空的有限顶点集合V和一个有限边集合E组成(可以一条边都没有,但不 能一个顶点都没有)
  • 3. 操作集:对于任意图G属于Graph,以及v属于V,e属于E
1. Graph Create():建立并返回空图
2. Graph InsertVertex(Graph G, Vertex v):将v插入G
3. Graph InsertEdge(Graph G, Edge e):将e插入G;
4. void DFS(Graph G,Vertex v):从顶点v出发深度优先遍历图G;
5. void BFS(Graph G,Vertex v):从顶点v出发宽度优先遍历图G;
6. void ShortestPath(Graph G,Vertex v,int Dist[]):计算图G中顶点v到任意其他
顶点的最短距离
7. void MST(Graph G):计算图G的最小生成树

常见术语

  1. 无向图:无所谓方向的
  2. 有向图:在图中,若用箭头标明了边是有方向性(单向或者双向)的,则称这样的图为有向图,否则
    称为无向图。
  3. 权重:边上显示的数字,可以有各种各样的现实意义
  4. 网络:有带权重的图

邻接矩阵表示法

怎么在程序中表示一个图

邻接矩阵——有什么好处?

  1. 直观、简单、好理解
  2. 方便检查任意一对顶点间是否存在边
  3. 方便找任一顶点的所有"邻接点"(有边直接相连的顶点)
  4. 方便计算任一顶点的"度"(从该点出发的边数为"出度",指向该点的边数为"入度")有向图的概念

邻接矩阵——有什么不好?

  1. 浪费空间——存稀疏图(点很多而边很少)有大量无效元素
    但对稠密图(特别是完全图)还是很合算的
  2. 浪费时间——统计稀疏图中一共有多少条边

无向图

对应行(或列)非0元素的个数

有向图

对应行非0元素的个数是"出度";对应列非0元素的个数是"入度"

邻接表表示法

邻接表:G[N]为指针数组,对应矩阵每行一个的链表,只存非0元素

优点:

  1. 方便找任一顶点的所有"邻接点"
  2. 节约稀疏图的空间
    需要N个头指针+2E个结点(每个结点至少2个域)
  3. 方便计算任一顶点的"度"
    对无向图:是的
    对有向边:只能计算"出度";需要构造"逆邻接表"(存指向自己的边)来方便计算"入度"
  4. 方便检查任意一对顶点间是否存在边?NO
    对于网络,结构中要增加权重的域

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

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

相关文章

[附源码]Python计算机毕业设计SSM基于java的云顶博客系统(程序+LW)

环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 Maven管理等…

【车载开发系列】UDS诊断---诊断会话控制($0x10)

【车载开发系列】UDS诊断—诊断会话控制&#xff08;$0x10&#xff09; UDS诊断---诊断会话控制&#xff08;$0x10&#xff09;【车载开发系列】UDS诊断---诊断会话控制&#xff08;$0x10&#xff09;一.概念定义二.三种会话模式1&#xff09;默认会话2&#xff09;编程会话3&a…

【DevPress】V2.4.0版本发布,增加留资组件

DevPress V2.4.0版本于2022年9月29日发版 一、该版本功能包含 1、新需求 1&#xff09;企业社区移动端优化&#xff0c;响应式布局&#xff0c;提升用户浏览体验。 2&#xff09;增加社区留资组件&#xff0c;更好在社区首页和内容详情页展示 - 包含新建组件&#xff0c;包含…

基于PHP+MySQL医药信息查询系统的设计与开发

医药信息查询系统的基本功能包括用户注册登录,查看医药资讯,医药查询和在线留言等信息。 PHP中药管理系统是一个服务类型的网站,系统通过PHp&#xff1a;MySQL进行开发,分为前台和后台两部分,前台部分主要是让需要买药的人员查看和查询药品信息。后来部分主要是让管理员对网站的…

通过Xshell操作Jetson Nx

1 Jetson Nx Nx留有Uart2 口&#xff0c;便于使用xshell等进行操作。 串口有三根线。链接后使用。 2 XShell 软件 2.1 XShell软件介绍 XShell 软件是一个Windows上运行的终端模拟器&#xff0c;支持SSH, SFTP, TELNET, RLOGIN&#xff0c;和Serial。用于连接Unix或Linux服…

3.7.1、MAC地址(数据链路层)

1、基本介绍 连接在信道上的主机只有它们两个 一个数据链路层地址&#xff1a; 当多个主机连接在同一个广播信道上&#xff0c;要想实现两个主机之间的通信&#xff0c;则每个主机都必须有一个唯一的标识, 在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这…

这支神秘组织,已成功预测了多届世界杯冠军

2022卡塔尔世界杯&#xff0c;正打的如火如荼&#xff0c;也有很多人买球买的不亦乐乎。 现在就有很多朋友、粉丝&#xff0c;通过各种渠道找我&#xff0c;让我来帮他预测一下比赛。可我预测的也不准呀&#xff0c;我都是猜的&#xff0c;不过我不准&#xff0c;不见得别人不准…

m基于基站休眠的LTE-A异构网络中节能算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 要求 1.开发一个软件工具&#xff0c;可以直观地演示如何在LTE-A异构网络中通过基站的睡眠模式节约能源 2.需要演示基于用户的移动性如何设置基站的开关(睡眠模式) 3.自己设计基站睡眠模式的直观…

Python标准库之pickle

1. pickle标准库简介 pickle&#xff0c;作为名词表示泡菜&#xff0c;作为动词表示用醋或盐水保存食物。由此不难联想到&#xff0c;用存储设备持久化保存数据。而pickle标准库恰是一个 Python 对象结构的二进制序列化和反序列化的核心库&#xff0c;专用于表示Python语言大量…

Stable Diffusion7

它也写到第七部了.. Stability AI宣布&#xff0c;Stable Diffusion 2.0版本上线&#xff01;1.0版本在今年8月出炉&#xff0c;三个月不到&#xff0c;还热乎着呢&#xff0c;新版本就来了。 深度学习文本到图像模型的最新版本——Stable Diffusion 2.0。相较于1.0&#xff…

面试必知的9个性能测试指标,你完全了解吗?

吞吐量 单位时间内&#xff0c;系统能够处理多少请求&#xff0c;吞吐量代表网络的流量&#xff0c;TPS越高&#xff0c;吞吐量越大&#xff0c;还包含了数据的吞吐量。一般单位为秒&#xff0c;每秒处理的请求量。 注意&#xff1a;我们看到的JMeter聚合报告一般如下图&…

Kotlin高仿微信-第7篇-主页-动态权限申请

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

指定牛导|肿瘤专业医生芝加哥大学博士后实现夙愿

Q医生有个愿望&#xff0c;希望拜师在牛导麾下&#xff0c;利用国家留学基金委2年博士后的机会&#xff0c;真正做出科研成果&#xff0c;发表高质量文章。为此列出了合作导师标准并指定了几位教授。经过团队努力&#xff0c;我们终于为其达成夙愿—获得指定牛导的博士后邀请函…

Redis实战之缓存:查询、添加缓存、更新缓存、缓存预热、缓存穿透、缓存雪崩、缓存击穿 解决方案及实例代码

缓存 什么是缓存? 缓存(Cache), 就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码。 为什么要使用缓存&#xff1f; 缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器…

SpringBoot利用Spring SPI机制实现自动按顺序加载注册JavaBean到容器中

前言&#xff1a; 1、SPI机制(Service Provider Interface)&#xff0c;服务提供接口&#xff0c;主要是用来解耦&#xff0c;资源文件目录下的 \resources\META-INF\spring.factories 我们把它归纳为Spring为我们提供的SPI机制&#xff0c;通过这种机制&#xff0c;我们可以在…

docker 容器原理分析笔记(下)

目录 chroot rootfs Volume&#xff08;数据卷) 打包一个go镜像 总结 chroot 当一个容器被创建的时候&#xff0c;我们希望容器中进程看到的文件是一个独立的隔离环境&#xff0c;我们可以在容器进程重启之前挂载整个根目录 /,由于 Mount Namespace 的存在&#xff0c;这…

发布 .NET MAUI / MAUI Blazor 应用 (1) - Windows

发布用于Windows的 .NET MAUI 应用 打开 PowerShell 终端 , 命令行进入工程目录,以我的例子工程为例, cd BlazorMaui BlazorMaui 替换为你自己工程名字 New-SelfSignedCertificate -Type Custom -Subject "CNBlazorMaui" -KeyUsage DigitalSignature -FriendlyName &…

python如何将日期字符串格式化年月日

今天用Python的DataFrame处理数据时&#xff0c;相对一波数据按日期分组处理&#xff0c;但是原始数据包含时间分秒&#xff0c;无法按日期分组&#xff0c;因此需要先将数据转成只包含年月日的数据格式。但是写代码处理过程中发现有点绕&#xff0c;不熟悉的同学容易绕晕。这种…

编程语言如何推动DeFi成为主流?

随着DeFi的快速增长&#xff0c;提供DeFi服务的平台和产品也如雨后春笋般纷纷冒头。作为衡量DeFi协议管理资金规模的标准之一&#xff0c;DeFi“总锁仓量”在过去两年一路从100亿美元增长到超400亿美元&#xff0c;期间更是一度冲上1800亿美元的巅峰。但直到今天&#xff0c;智…

Python爬虫request模块的get、post方法应用

目录 post方法使用 一、确定爬取网站的数据 二、分析数据类型和相应类型 三、使用requetst模块方法进行爬取 四、源代码分享 get的方法使用 一、分析抓取网站操作 二、参数的分析和组成 三、使用get模块方法进行爬取结果 四、源代码分享 思考和总结 参考网站 爬虫是…