图的存储

news/2024/10/12 4:31:29

模板题,但码量大。本题主要考察的是存图的方式。

图的类别

有向图:简单来说是指一副具有方向性的图。例如节点 \(a\) 指向节点 \(b\) ,则只能从 \(a\) 走到 \(b\),而不能从 \(b\) 走到 \(a\)

无向图:若一个图中每条边都是无方向的,则称为无向图。如果一个图为无向图,则既可以从节点 \(a\) 走到节点 \(b\),又可以从 \(b\) 走到 \(a\)

赋权图:若一个图中连接两个节点的边有长度,则这个图是赋权图。

图的存储方式

邻接矩阵

邻接矩阵是一个 \(n\)\(n\) 列的矩阵,\(n\) 代表节点数。仅能在一张无重边的图中使用。

赋权图

假如节点 \(i\) 连接节点 \(j\),则将矩阵中第 \(i\) 行第 \(j\) 列设为边权,表示这里有一条长度为 \(w\) 的边。

无权图

存法都差不多只不过将第 \(i\) 行第 \(j\) 列的值设为一。仅表示这里有一条边。

注意

邻接矩阵中如果节点 \(a\) 连接节点 \(b\) 且这个图为无向图,那么第 \(a\) 行第 \(b\) 列和第 \(b\) 行第 \(a\) 列都要赋值,因为两边都可以走。如下图。

代码实现

jz[u][v]=w  //节点u到节点v之间有一条长为w的边

关联矩阵

同样是一个二维数组,他记录的是一个点与一条边的关系。并且关联矩阵仅能在一张无自环并且无权的图中使用。

存法

现在第 \(i\) 条边上有节点 \(u\)\(v\) 相连,如果点 \(u\) 在第 \(i\) 条边中作为起点出现,则将 \(b_{u,i}=1\),否则等于负一。 如果这个图是无向图则将 \(b_{u,i}\)\(b_{v,i}\) 都设为一。如下。

邻接链表

相对于邻接矩阵,邻接表虽然更加复杂却极大减少了空间复杂度。邻接表就相当于一维数组与链表的结合体。同时他还有一个熟悉的名字,链式前向星

存法

顶点: 按编号顺序将顶点数据存储在一维数组中。

关联同一顶点的边: 用线性链表存储。

无向图

有向图

链式前向星

void add(int x,int y,int v){ //x节点指向y节点,长度为vc[++cnt].v=v;c[cnt].to=y;c[cnt].next=h[x];h[x]=cnt;
}

正向表/逆向表

正向表

当对图 \(G\) 的节点与边进行编号后,正向表将每个节点
的直接后继集中在一起存放。

有向图的正向表有一个 \((n+1)\) 维向量 \(A\),一个 \(m\) 维向量 \(B\) 组成。
\(A(i)\) 表示节点 \(v_i\) 的第一个后继在 \(B\) 中的地址。\(B\) 中存放这些后继节点的编号,即 \(A(n+1)=m+1\)

逆向表

与正向表相反,逆向表是将每个结点的直接前驱 集中在一起存放

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

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

相关文章

网络编程练习题

网络编程代码 #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <errno.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h> #include <a…

11-CSS定位

CSS定位01 CSS定位概念理解 01 标准流布局概念的理解02 position属性02 相对定位 依然在标准流中 应用场景: 在不影响其它元素的情况下,对当前元素进行微调 <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><met…

Combining Recurrent, Convolutional, and Continuous-time Models with Linear State-Space Layers

目录概符号说明LSSL和其它方法的联系代码Gu A., Johnson I., Goel K., Saab K., Dao T., Rudra A., and Re C. Combining recurrent, convolutional, and continuous-time models with linear state-space layers. NeurIPS, 2021.State space representaion-wiki.概 Mamba 系列…

堆基础知识

arenachunk通俗地说,一块由分配器分配的内存块叫做一个 chunk,包含了元数据和用户数据。具体一点,chunk 完整定义如下: struct malloc_chunk {INTERNAL_SIZE_T mchunk_prev_size; /* Size of previous chunk (if free). */INTERNAL_SIZE_T mchunk_size; …

【Azure Spring Apps】Spring App部署上云遇见 502 Bad Gateway nginx

问题描述 在部署Azure Spring App应用后,访问应用,遇见了502 Bad Gateway Nginx。问题解答 502 Bad Gateway, 并且由Nginx返回。而自己的应用中,并没有定义Nginx相关内容,所以需要查看问题是否出现在Azure Spring App服务的设置上。 根据Spring App的通信模型图判断,502的…

学生管理系统的CRUD

include using namespace std; typedef struct Studnet { //初始化结构体变量 int ID; double math_scores; double english_scores; double computer_scores; double total_scores;}Student; void Input_student_score(int size, Student* stu); //输入所有学生信息 void Out…

C语言中关于Base64编码的基础原理

Base64编码简述: 1.Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。 2.Base64,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"一共64个字符的字符集,(任何符号都可以转…

09-盒子模型

盒子模型01 认识盒子模型02 盒子模型的四边03 盒子边框04 盒子内边距-padding 通常用于设置边框和内容之间的间距 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible&quo…