数据结构图的基础概念
1、图的概念
图(Graph):是由顶点的有穷非空集合和顶点之间边的集合组成。
顶点(Vertex):图中的数据元素。
边(Edge):顶点之间的逻辑关系,边可以是有向的或无向的,也可以带有权重(可以表示距离,花费等)
无向边:若顶点之间的边没有方向,则称这条边为无向边
有向边:若从顶点 vi 到 νj的边有方向,则称这条边为有向边(一条无向边可以用两条有向边来表示)
无向图
图中任意两个顶点之间的边都是无向边,无向边表示从节点1可以到节点2,也可以从节点2到节点1
有向图
图中任意两个顶点之间的边都是有向边 图中的方向都是朝向一个方向的,并不是有向图都是朝向一个方向,只是为了方便,有向图可以理解为路径是有方向的,只能按着箭头的方向
2、图的存储
图的存储常用的邻接矩阵和邻接表
邻接矩阵存储查询简单方便,缺点当遇到的图是稀疏图时会浪费大量空间
邻接表相对邻接矩阵复杂点,优点节省空间,但当图时稠密图时它的优点就不明显了
邻接矩阵
数组(i,j)表示从i到j是否连通,0表示不联通,不为0表示联通
无向图存储
将一条有向边转化为两条有向边,比如 顶点1和顶点2这条无向边转化为顶点1到顶点2和顶点2到顶点1两条有向边
有向图存储
邻接表
//顶点 class POS{public POS(int head) {this.head = head;}public int head;//这个值指向的是边}
//边class Edge{public int v;public int next;}//图的初始化
top =0;//用来记录边的位置
posList =new ArrayList<>();//顶点
edgeList =new ArrayList<>();//边的列表
for(int i = 0;i<=posSize;i++){posList.add(new POS(-1));//初始化hadVisted[i] =false;//初始化}
//添加边邻接表,添加一条从u到v的边public void Add_Edge(int u, int v) {// 1 -> 4->3->2Edge edge =new Edge();edge.v =v;edge.next =posList.get(u).head;posList.get(u).head =top;edgeList.add(edge);top++;} 3、图的搜索
深搜
深搜就是一个递归 1、从顶点1开始遍历,遍历到顶点2,然后从顶点2开始遍历
2、由顶点2遍历到顶点5,顶点5遍历到顶点8
3、到顶点8,没有路径回溯到顶点5,然后回溯到顶点2,遍历顶点6, 由顶点6遍历到顶点7
4、顶点8已遍历,回溯6,然后回溯到2,然后回溯到1
5、遍历顶点3,4
//深搜public void dfsVist(int u){for(int i = posList.get(u).head;i!=-1;i=edgeList.get(i).next){Edge edge = edgeList.get(i);if(!hadVisted[edge.v]){System.out.println("访问节点:"+edge.v);hadVisted[edge.v] =true;vist(edge.v);}}} 广搜
广搜需要一个队列来辅助 从1开始
将与1相连的 2,3,4加入队列,同时1出列
从队列开头取出顶点2,将与2相连的5,6加入队列,2出列
取出3,与3相连的都访问了,取出4,3,4出列,7进入队列
取5,将与5相连的8加入队列,5出列
接下来取出6,7,8,因为都访问过了,等列表为空,遍历结束
public void bfsVist(int u){Queue queue = new LinkedList();queue.add(u);//加入队列System.out.println("访问节点="+u);while (!queue.isEmpty()){//直至列表为空Integer p = (Integer) queue.poll();//取出列表里元素for(int i = posList.get(p).head;i!=-1;i=edgeList.get(i).next){Edge edge = edgeList.get(i);if(!hadVisted[edge.v]){hadVisted[edge.v] =true;System.out.println("访问节点="+edge.v);queue.add((Integer)edge.v);}}}} - END -
关于奇舞团
奇舞团是 360 集团最大的大前端团队,代表集团参与 W3C 和 ECMA 会员(TC39)工作。奇舞团非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。

相关文章:
数据结构图的基础概念
1、图的概念 图(Graph):是由顶点的有穷非空集合和顶点之间边的集合组成。顶点(Vertex):图中的数据元素。边(Edge):顶点之间的逻辑关系,边可以是有向的或无向的,也可以带有权重(可以表示距离,花费等…...
一场九年前的“出发”:奠基多模态,逐鹿大模型
原创:谭婧 全球AI大模型的技术路线,没有多少秘密,就那几条路线,一只手都数得过来。 而举世闻名的GPT-4浑身上下都是秘密。 这两件事并不矛盾。为什么呢? 这就好比,回答“如何制造一台光刻机?”。…...
什么是url跳转漏洞?
什么是url跳转漏洞 简介原因:如何防止 简介 URL跳转漏洞是一种Web应用程序安全问题,指的是在应用程序处理URL跳转时,由于程序员的疏忽或设计不当,攻击者可能通过构造恶意URL来实现对应用程序的攻击。 原因: 跳转条件…...
生物学经典blast比对算法,R语言和Python如何实现?
Blast比对算法原理与实现方式 做生物的同学肯定听说过blast比对这个方法,一般在NCBI等网站上可以在线进行比对,也可以在本地服务器进行比对,那么blast算法究竟是怎么实现对不同序列的比对呢? 本文分享经典blast算法的基础原理&…...
Android 开机动画支持mp4格式视频播放
前 言 Android系统在启动的过程中,最多可以出现三个画面,每一个画面都用来描述一个不同的启动阶段。无论是哪一个画面,它们都是在一个称为帧缓冲区(frame buffer,简称fb)的硬件设备上进行渲染的。 自定义…...
软考A计划-试题模拟含答案解析-卷十
点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…...
Kafka入门(安装和SpringBoot整合)
文章目录 一、Docker安装Kafka1. 创建网络2. 安装zookeeper3. 安装Kafka 二、Kafka介绍1. Kafka简介 三、SpringBoot整合Kafka1. 引入pom依赖2. application.propertise配置3. Hello Kafka(Producer)4. Consumer Kafka5. 带回调的生产者6. 自定义分区器7. kafka事务提交8. 指定…...
gitLab相关命令
gitLab相关命令 1) 远程仓库相关命令 git clone 远程仓库地址 #检出仓库git remote -v #查看远程仓库git remote add [name][url] #添加远程仓库,git remote add origin 远程仓库地址git remote rm [name] #删除远程仓库,git remote rm origingit remo…...
一些查看日志时的常用命令
文章目录 1、grep -r 搜索内容 *2、l * 关键字 *3、tail -f 文件名4、tail -n X 文件名5、cat 文件名 | grep "关键字" -C X同理可得,-A同理可得,-B 一些查看日志时的常用命令 1、grep -r 搜索内容 * 作用:在一堆文件里࿰…...
Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收
执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链。函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境。全局执行环境只能访问全局执行…...
CRDT协同算法
CRDT的英文全称是Conflict-free Replicated Data Type,最初是由协同文本编辑和移动计算而发展的,现在还被用作在线聊天系统、音频分发平台等等。当前CRDT算法在富文本编辑器领域的协同依旧是典型的场景,常用于作为实现文档协同的底层算法&…...
近代中国的三次思想文化运动
1、戊戌变法中维新派顽固派论战 第一次思想解放潮流是1898年维新派与顽固势力的论战。论战的内容有:要不要变法,要不要兴民权、实行君主立宪,要不要提倡西学、改变教育制度。此次论争是资本主义思想同封建主义思想的正面交锋,此后…...
《地铁上的面试题》--目录
第一部分:基础 数据结构与算法 1.1 数组和链表 1.2 栈和队列 1.3 树和图 1.4 排序和搜索算法 1.5 动态规划和贪心算法 操作系统 2.1 进程与线程 2.2 内存管理 2.3 文件系统 2.4 进程同步与通信 2.5 虚拟化和容器化技术 计算机网络 3.1 TCP/IP协议 3.2 HTTP和HTTPS…...
在VIVADO下烧写ZC706板载FLASH的操作步骤
1,原理图分析 首先看原理图,我们兼容ZC706的板子有两片 FLASH,型号是S25FL128A,连接方式如下: 可以看到两片是分别接在了XC7Z045芯片的引脚上,是互不相干的并联方式,每个FLASH芯片支持X4模式,也…...
第二期:链表经典例题(两数相加,删除链表倒数第N个节点,合并两个有序列表)
每道题后都有解析帮助你分析做题,答案在最下面,关注博主每天持续更新。 PS:每道题解题方法不唯一,欢迎讨论! 1.两数相加 题目描述 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式…...
ESP32设备驱动-SHT35湿度传感器驱动
SHT35湿度传感器驱动 1、SHT35介绍 SHT35 数字温湿度传感器基于 Sensirion SHT35 传感器 IC。 得益于Sensirion的CMOSens技术,高度集成的电容式湿度传感元件和带隙温度传感元件,SHT35具有高可靠性和长期稳定性,功耗低,响应速度快,抗干扰能力强。 传感器支持IIC通信,兼容…...
如何快速判断GitLab 是否出现 OOM
查看系统日志: 使用 dmesg 命令来查看系统日志,搜索 Out of memory 关键字: sudo dmesg | grep -i "out of memory"如果输出结果中包含 Out of memory 或 oom-killer 等关键字,则表示系统出现了 OOM。 查看 GitLab 日…...
Word查找和替换通配符(完全版)
Word查找栏代码通配符一览表 序号 清除使用通配符复选框 勾选使用通配符复选框 特殊字符 代码 特殊字符 代码or通配符 1 任意单个字符 ^? 任意单个字符 ? 2 任意数字 ^# 任意数字(单个) [0-9] 3 任意英文字母 ^$ 任意英文字母 [a…...
Linux下socketpair系统API调用使用说明
目录 1.socketpair函数说明 2.socketpair使用举例 在阅读nginx源码时,发现其调用socketpair来实现master和worker进程之间进行数据交互。其代码如下: 思考:master和worker进程是父子关系,有亲属关系的进程通过pipe/pipe2&#x…...
【Netty】Future 源码分析(十六)
文章目录 前言一、JDK 的 Future 接口二、Netty 的 Future 接口三、ChannelFuture 接口总结 前言 回顾Netty系列文章: Netty 概述(一)Netty 架构设计(二)Netty Channel 概述(三)Netty Channel…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果,那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
