图的存储结构

news2024/11/27 22:44:49

图的存储结构

1.邻接矩阵表示法

设图G = (V, E)是具有n个顶点的图,顶点顺序依次为{v1,v2,v3.......}

a[N][N]为 n 阶方阵

  • G 的邻接矩阵具有此种性质:

    • a[i][j]=1,则存在边(vi, vj)或者弧<vi, vj> (即两点之间存在边或弧)
    • a[i][j]=0,则不存在边(vi, vj)或者弧<vi, vj> (即两点之间不存在边或弧)
  • 特点

    • 无向图的邻接矩阵对称,可压缩存储;有 n 个顶点的无向图所需存储空间为 n(n-1)/2。
    • **有向图的邻接矩阵不一定对称;**有 n 个顶点的有向图所需存储空间为 n²
    • 无向图中顶点 vi 的度是邻接矩阵中第 i 行 1 的个数
    • 有向图中
      • 顶点 vi 的出度是邻接矩阵中第 i 行 1 的个数(向外连弧,即作为弧尾)
      • 顶点 vi 的入度是邻接矩阵中第 i 列 1 的个数(被连入的弧,即作为弧头)
  • 存图结构

    • 我们需要定义两个数组
      • 一个一维数组:用来记录顶点的信息
      • 一个二维数组:用来记录顶点之间的关系(同a[i] [j]的描述)
  • 示例

    在这里插入图片描述

  • 存储结构

    #define INFINITY    INT_MAX // 最大值∞ 
    #define MAX_VERTEX_NUM   20 // 最大顶点个数 
    typedef enum {DG, DN, UDG, UDN} GraphKind;  
    							//图的类型{有向图,有向网,无向图,无向网} 
    typedef struct ArcCell 
    { 
       EType adj;  	  // EType是顶点关系类型,对无权图用1或0表示相邻否;                           			     // 对带权图,则为权值类型
       InfoType *info;// 该弧相关信息的指针
    } ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; 
    
    typedef struct 
    { 
        VertexType vexs[MAX_VERTEX_NUM]; // 顶点向量(一维矩阵)
        AdjMatrix arcs; 				// 邻接矩阵(二维矩阵)   
        int vexnum, arcnum; 			// 图的当前顶点数和弧(边)数
        GraphKind kind; 				// 图的种类标志
    } MGraph; 
    
2.邻接表表示法
  • 存图结构

    • 将所有顶点存入一个表中,作为头结点的表

    • 将与每个头结点有邻接关系的点作为表结点链到头结点之后

      • 头结点包含数据域与指针域
      • 表结点包含邻接点域(邻接点在表头中的位置)与链域(指示下一条边或弧)

      在这里插入图片描述

  • 邻接表的特点

    • 顶点 vi 的出度为第 i 个单链表中的结点个数
    • 顶点 vi 的入度为整个单链表中邻接点域值是i-1的结点个数
    • 找出度易,找入度难
  • 示例
    在这里插入图片描述

  • 存储结构

    #define MAX_VERTEX_NUM 20
    
    //表结点的结构(链表结构)
    typedef struct ArcNode 
    { 
        int adjvex; // 该弧所指向的顶点的位置    
        struct ArcNode *nextarc; // 指向下一条弧的指针  
        //InfoType *info; // 该弧相关信息的指针
    } ArcNode;
    
    //头结点数组
    typedef struct VNode 
    { 
        VertexType data; // 顶点信息
        ArcNode *firstarc; // 指向第一条依附该顶点的弧  
    } VNode, AdjList[MAX_VERTEX_NUM]; 
    
    //组合成的图的结构
    typedef struct 
    { 
        AdjList   vertices; 
        int   vexnum, arcnum; // 图的当前顶点数和弧数  
        int   kind; // 图的种类标志
    } ALGraph; 
    
3.十字链表表示法
  • 存图结构

    • 同样由两部分组成:顶点结点和弧结点

在这里插入图片描述

  • 存储结构

    #define MAX_VERTEX_NUM 20
    
    typedef struct ArcBox 
    { 
        int tailvex, headvex; 		   // 该弧的尾和头顶点的位置 
        struct ArcBox *hlink, *tlink;  // 分别指向下一个弧头相同和弧尾相同的弧的指针域 
        InfoType *info;   			   // 该弧相关信息的指针 
    } ArcBox;
    
    typedef struct VexNode 
    { 
       VertexType data; 
       ArcBox *firstin, *firstout; // 分别指向该顶点第一条入弧和出弧 
    } VexNode; 
    
    typedef struct 
    { 
       VexNode xlist[MAX_VERTEX_NUM]; // 表头向量 
       int vexnum, arcnum; 			  // 有向图的当前顶点数和弧数 
    } OLGraph; 
    

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

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

相关文章

day01 计算机基础和环境搭建

day01 计算机基础和环境搭建 课程目标&#xff1a;让大家了解计算机基础知识并完成python的环境搭建 课程概要&#xff1a; 计算机基础 编程的本质 python的介绍 python环境的搭建 1.计算机基础 1.1 基本概念 计算机的组成 计算机的组计算机是由多个硬件组合而成&#…

快2023了你不会还没学uni-app吧?(uniapp开发快速上手,uniapp项目创建,基础目录介绍)

uniapp新人上手指南前言开发工具快速尝鲜—创建uni-app项目项目基础目录介绍最后前言 uni-app 是一个使用 Vue.js (opens new window)开发所有前端应用的框架&#xff0c;开发者编写一套代码&#xff0c;可发布到14个平台&#xff0c;听起来是不是非常厉害&#xff0c;如果你后…

【论文阅读】Semi-supervised Sequence Learning半监督序列学习

【论文阅读】Semi-supervised Sequence Learning半监督学习 前言 半监督学习(Semi-Supervised Learning&#xff0c;SSL) 是模式识别和机器学习领域研究的重点问题&#xff0c;是监督学习与无监督学习相结合的一种学习方法。半监督学习使用大量的未标记数据&#xff0c;以及同…

别让 Linux 成为拿offer的阻碍

文章目录前言目录结构VI/VIM 编辑器是什么一般模式编辑模式&#xff08;插入模式&#xff09;命令模式模式间转换常用基础命令&#xff08;重要&#xff09;帮助命令man 获得帮助信息help 获得 shell 内置命令的帮助信息type 查看某命令是内置命令还是外部命令常用快捷键文件目…

Java 之 ElasticSearch8.x.x 【一篇文章精通系列】【ES的基本操作,ES安装,ES head + Kibana】

Java 之 ElasticSearch8.x.x 【一篇文章精通系列】【上&#xff1a;ES的基本操作&#xff0c;ES安装&#xff0c;ES head Kibana】一、ElasticSearch的安装1、解压安装ES2、熟悉目录3、启动ES4、安装可视化界面&#xff08;elasticsearch head&#xff09;5、了解ELK6、安装Ki…

【路径插值与抽稀篇】(3)路径插值与抽稀篇

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、路径曲线插值、拟合和逼近的区别1、拟合2、插值3、逼近二、路径点线性插值方法&#xff08;1&#xff09;纯跟踪&#xff…

EDA程序设计--计时器设计

实训题目&#xff1a;计时器的设计 1 系统设计 1.1设计要求 1.1.1 设计任务 设计并制作一台计时器。 1.1.2 性能指标要求 ① 用EDA实训仪的I/O设备和PLD芯片实现计时器的设计。 ② 计时器能够显示时、分和秒。 ③ 用EDA实训仪上的8只八段数码管显示时、分和秒&#xff08;如00…

mysql 常用查询优化策略详解

前言 在程序上线运行一段时间后&#xff0c;一旦数据量上去了&#xff0c;或多或少会感觉到系统出现延迟、卡顿等现象&#xff0c;出现这种问题&#xff0c;就需要程序员或架构师进行系统调优工作了&#xff0c;其中&#xff0c;大量的实践经验表明&#xff0c;调优的手段尽管…

Linux学习——目录操作和库使用

目录 一、打开目录 二、读取目录 三、关闭目录 四、修改文件权限 五、获取文件属性 六、库的概念&#xff1a; 1、静态库 缺点&#xff1a; 优点&#xff1a; 创建静态库步骤&#xff1a; 链接静态库&#xff1a; 2、动态库 动态库的生成步骤&#xff1a; 练习题&a…

论文阅读之Enhancing Transformer with Sememe Knowledge(2020)

文章目录论文阅读Transformmer-SETransformer-SP实验结果总结参考论文阅读 文章建议结合两种简单的方法将义原知识整合&#xff1a; 1&#xff09;基于语言学假设&#xff0c;我们将聚合义原嵌入添加到每个词嵌入中以增强其语义表示&#xff1b; 2&#xff09;我们使用义原预测…

OpenCV实战项目 -- 口罩识别

每次我忘记戴口罩去食堂吃饭的时候&#xff0c;门口都会有志愿者学生提醒你&#xff1a;“你好&#xff0c;麻烦戴下口罩。” 进门后里面那块大屏幕还会发出声音&#xff1a;“请佩戴口罩”。 上次博客仿照宿舍楼下那块大屏幕写了个人脸考勤&#xff0c;所以这次我打算弄一个口…

std::logic_error 错误的解决

今天测试一个程序&#xff0c;突然出现一个 std::logic_error 错误&#xff0c;详细如下&#xff1a; 这个应该是 std::string 相关的一个错误&#xff0c;具体的错误信息还得用 GDB 跟踪一下了。 看第 8 栈帧已经是系统库里的东西了&#xff0c;第 9 帧是我本地的代码&#x…

【C进阶】之定义结构体及使用typedf

1 结构体中包含函数指针类型成员 声明的格式&#xff1a; struct 结构体名 { 返回类型 (*函数指针名)(形参列表); }; 定义结构体类型的变量并对结构体中的函数指针成员进行初始化 struct 结构体名 结构体变量名; 结构体变量名.函数指针名 函数名; // 函数指针指向的函数具有相…

目标检测(7)—— YOLO系列V3

一、YOLOV3 多scale 三种scale&#xff1a; 为了检测到不同大小的物体&#xff0c;设计了3个scale。 特征融合不好。 感受野大的特征图预测大的&#xff0c;中的预测中的&#xff0c;小的预测小的。各自预测各自的&#xff0c;不用做特征融合。 三个候选框&#xff1a; 每个特…

「C++小游戏教程」基本技巧(2)——系统 DOS 命令

0. 引言 「C小游戏教程」基本技巧(1)——随机化 在 (1) 中&#xff0c;我在使用 random_shuffle() 时加了一个 system("pause");。其中 system() 是系统发出 DOS 命令的函数&#xff0c;原型为 int system(char *command);。我们今天就来谈谈这个函数的主要功能用途…

Redis持久化

目录 一、Redis高可用 1.持久化 2.主从复制 3.哨兵 4.Cluster集群 二、Redis持久化 三、RDB持久化 1.概念 2.触发条件 &#xff08;1&#xff09;手动触发 &#xff08;2&#xff09;自动触发 3.执行流程 4.启动时自动加载 四、AOF持久化 1.概念 2.开启AOF持久…

微信公众号获取openid流程

说明 微信公众号获取openid&#xff0c;在官方文档中称为网页授权&#xff0c;授权有两种scope&#xff0c;snsapi_base和snsapi_userinfo&#xff0c;snsapi_base是静默授权&#xff0c;不需要用户同意&#xff0c;以下要说的就是静默授权。 关于网页授权的两种 scope 的区别…

[CISCN2019 华北赛区 Day1 Web2]ikun

要买lv6 然后下一页下一页的找&#xff0c;也找不到 来个脚本爆破一下 #coding&#xff1a;utf-8 import requests import time for i in range(1,200):print(i)url http://17dfa3f4-2826-4b97-9d61-a920b6c8976f.node4.buuoj.cn:81/shop?page{}.format(i)r requests.get…

目标检测(6)—— YOLO系列V2

一、YOLOV2改进的概述 做的改进如下图&#xff1a; Batch Normalization 批量归一化层 不加BN层&#xff0c;网络可能学偏&#xff0c;加上归一化进行限制。 从今天来看&#xff0c;conv后加BN是标配。 更大的分辨率 V1训练的时候使用224224&#xff0c;测试用448448。 V2训…

胡扯推荐算法(协同)及其dome实现

文章目录前言推荐系统定义基本分类相似度计算欧式距离皮尔逊系数余弦相似度协同过滤案例数据定义相似度计算推荐svd奇异值分解优化完整代码总结前言 打瞌睡遇到送枕头的感觉真爽嘿嘿 BoyC啊 废话不多说&#xff0c;开始吧。 推荐系统定义 推荐系统(Recommendation System,…