网状结构(图)图的存储(邻接矩阵、邻接表)、图的遍历(深度DFS、广度BFS)、图的最短路径

2023-11-14

  • 多对多关系

  • 是一种网状数据结构,图是由非空的顶点集合和一个描述顶点之间关系的集合组成

  • 其定义
    Graph = (V, E)
    V={x | x ∈某个数据对象}
    E = {<u, v> | P(u ,v) ∧ (u, v∈V )}
    V是具有相同特性的数据元素的集合,V中的数据元素通常称为顶点(Vertex)
    E是两个顶点之间关系的集合。P(u, v) 表示u和v之间有特定的关联属性

    若<u,v>∈E,则<u,v>表示从顶点u的一条弧,并称u为弧尾或起始点,称v为弧头或终止点
    此时图中的顶点之间的连线是有方向的,这样的图称为有向图。

    若<u,v>∈E,则<v,u>∈E,即关系E是对称的,此时可以用一个无序对(u,v)俩代替两个有序对
    它表示顶点u和顶点v之间的一条边,此时图中的顶点之间的连线是没有方向的,这种图称为无向图

    在无向图和有向图中V中的元素都称为顶点,而顶点之间的关系却有不同的效果,即弧或边,为避免麻烦,在不影响理解的前提下,统称为边(edge)
    并且还约定顶点集与边集都是有限的,并记顶点和边的数量为|V|和|E|
    无向图和有向图

无向图实际上也是有向图,双向图
加权图
加权图
在实际运用中,图不但徐耀表示元素之间是否存在某种关系
而且图的边往往与具有一定实际意义的数有关,即每条边都有与它相关的实数,称为权
这种边上带有权值的图称为带权图

图的存储

  • 邻接矩阵:二维数组 顺序存储结构
    邻接矩阵

邻接矩阵

  • 邻接表:链表 链式存储结构
    邻接表

图的遍历

  • 图的遍历就是从图中某个顶点出发,按某种方法对图中所有顶点访问且仅访问一次

  • 图的遍历算法是求解图的连通性问题、拓扑排序和求关键路径等算法

    深度优先遍历(DFS depth-first search):类似于树的先根遍历,是树的先根遍历的推广(可以采用递归和借助栈的非递归方式实现)
    广度优先遍历(BFS breadth-first search):遍历类似于树的层次遍历,它是树的安层遍历的推广(借助队列 非递归方式实现)

遍历

深度优先遍历:ABCDEFGHI
广度优先遍历:ABFCIGEDH

图的最短路径
图的最短路径

  • 最短路径1:段数最少的最短路径

    换乘最少
    使用广度优先搜索

  • 最短路径2:权值最小的最短路径

    时间最少、距离最短(看权值代表什么)
    使用迪克斯特拉算法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网状结构(图)图的存储(邻接矩阵、邻接表)、图的遍历(深度DFS、广度BFS)、图的最短路径 的相关文章

随机推荐

  • fileclude(文件包含漏洞及php://input、php://filter的使用)

    先介绍一些知识 1 文件包含漏洞 和SQL注入等攻击方式一样 文件包含漏洞也是一种注入型漏洞 其本质就是输入一段用户能够控制的脚本或者代码 并让服务端执行 什么叫包含呢 以PHP为例 我们常常把可重复使用的函数写入到单个文件中 在使用该函数
  • Shell编程学习(一)简单介绍和执行shell脚本的方式

    Shell编程是什么 为什么要学习Shell 首先我们要知道 我们的Java项目一般都是部署到Linux系统上的 这是由于Linux相对于Windows而言呢有一下几点 开源 可以修改定制和再发布 安全性更高 虽然windows有很友好的可
  • [Spring学习]01 Spring简介

    目录 一 Spring介绍 二 Spring 官网介绍 三 Spring框架特征 四 Spring核心技术 一 Spring介绍 Spring是一个分层的轻量级开源J2EE框架 由Rod Johnson创建 Spring是一个开源容器框架
  • 【前端关于JSON.parse解析报错处理方案】

    项目场景 vue的移动端项目 ios 解析返回的json报错 JSON parse解析特殊字符报错的解决办法 问题描述 JSON parse 解析该字符串 则会出现报错 安卓可能并不会 原因分析 对于深度嵌套的JSON字符串 使用 JSON
  • 程序员网页版工具集合

    Overview 本文主要收集一下作为程序员经常会用到的一些小工具网站 crontab表达式 https tool lu crontab struct和json互转 https json2struct mervine net json转义工
  • 接口自动化实现图片上传(selenium/RF)

    最近做自动化碰到一个问题 就是带图片上传的不知道怎么实现自动化 整理了下实现如下 上传图片postman 结果请求如下 上传图片后返回一个图片地址 post请求 body 是form data 而不是json fiddler抓取如下 sel
  • 【数据结构】6.3 二叉搜索树(C++)

    数据结构 6 3 二叉搜索树 目录 一 二叉搜索树的概念 二 二叉搜索树的实现 1 存储结构和实现接口 2 方法的实现 2 1 默认成员函数 2 2 查找find 2 3 插入insert 2 4 删除erase 2 5 中序遍历 一 二叉
  • linux找不到root用户,Linux中root用户找不到JAVA_HOME

    使用DOS比较两个txt文件的差异 将两个文件放入到同一个文件夹下 DOS下提供了FC命令 点击开始 gt 运行 gt 输入cmd 进入DOS下 进入指定目录 输入FC a txt b txt进行比较 下面会显示出之间的差异 lbrack
  • 02.SVN 忽略不需要提交的文件

    我使用的是 TortoiseSVN 每次提交到 svn 上的时候我不想提交 idea 文件夹 不需要列出 服务器也不需要存 因为是编译器的文件 多人维护项目时 总会显示修改 最好的避免类似问题的方法是添加参考文件到该项目的忽略列表 这样就不
  • ApkScan-PKID查壳工具+脱壳(搬运)

    Android APK 查壳工具免费通道 链接 https pan baidu com s 1rDfsEvqQwhUmep1UBLUwSQ 密码 wefd看众多小伙伴需要脱壳工具 现在补上1 Zjdroid github https git
  • 计算机网络(谢希仁-第八版)第五章习题全解

    5 01 试说明运输层在协议栈中的地位和作用 运输层的通信和网络层的通信有什么重要的区别 为什么运输层是必不可少的 地位和作用 从通信和信息处理的角度看 运输层向它上面的应用层提供通信服务 它属于面向通信部分的最高层 同时也是用户功能的最低
  • 线程安全threadsafe的四种策略

    线程之间的 竞争条件 作用于同一个mutable数据上的多个线程 彼此之间存在对该数据的访问竞争并导致interleaving 导致post condition可能被违反 这是不安全的 线程安全 ADT或方法在多线程中要执行正确 一 Con
  • MyBatis Log 插件无法显示SQL语句的原因

    MyBatis Log是IDEA一款下载量非常高的插件 该插件可以对控制台打印的日志进行解析 然后将对应的SQL语句整理并拼接好对应的参数 非常方便 有时插件却无法打印SQL 总的来说 有如下三种原因 1 项目的日志等级过高 修改日志等级为
  • mysql的jdbc的url

    driver com mysql jdbc Driver url jdbc mysql localhost 3306 数据库名 useSSL true useUnicode true characterEncoding utf8 usern
  • 交互设计师

    岗位职责 对产品进行行为设计和界面设计 行为设计是指各种用户操作后的效果设计 Web的操作以点击为主 点击操作又可以分为 表单提交 类和 跳转链接 类两种 除点击外 还涉及到拖拽操作等 界面设计包括 页面布局 内容展示等众多界面展现 例如
  • java获取集合里重复出现的元素及其出现次数

    1 代码如下 package com qingfeng ArrayList import java util import java util stream Collectors author wfj since 2020 6 11 pub
  • 网站服务器正常,有的外部http访问会出现503

    Linux系统相关内核参数配置异常 将 etc sysctl conf下 net ipv4 tcp tw recycle 0 net ipv4 tcp timestamps 0 执行 sysctl p 使配置生效 net ipv4 tcp
  • python安装opencv安装出错_在CentOS上安装带有python模块的OpenCV出现错误

    我回答我自己的问题 希望遭受同样问题的人能在短时间内找到解决问题的方法 在 1 首先 用yum更新所有的页面包 在安装OpenCV时 我发现了几个由依赖性问题引起的bug 在sudo yum update skip broken 2 使用
  • js将时间搓转换成字符串格式

    var timestamp 1425553097 var d new Date timestamp 1000 根据时间戳生成的时间对象 var date d getFullYear d getMonth 1 d getDate d getH
  • 网状结构(图)图的存储(邻接矩阵、邻接表)、图的遍历(深度DFS、广度BFS)、图的最短路径

    图 多对多关系 是一种网状数据结构 图是由非空的顶点集合和一个描述顶点之间关系的集合组成 其定义 Graph V E V x x 某个数据对象 E