图的存储

news/2024/5/17 15:20:31/文章来源:https://www.cnblogs.com/coding-inspirations/p/16606920.html
图的存储
 
  1. 邻接矩阵

  它是利用矩阵的二维结构,使其中的一维代表其中一个端点,另一维代表另一个端点。

 

 

scanf("%d",&m);
memset(G,0,sizeof(G));
for(int i=1;i<=m;++i)
{scanf("%d%d",&x,&y);G[x][y]=G[y][x]=1;//无向图
}

 

  缺点:空间占用太大,空间利用率不高,容易内存爆
 
 
  1. 权矩阵

  若边有权,则用A(i,j)存储边的权;若没有边,则默认为无穷大。
 
  1. 邻接表

  对于图中的每个顶点,邻接表把与其相连的所有边依次连成一条链。并建立一个新的元素在顶点与这条链的开端建立一个联系。
  在二维数组vector中,两个维度可以满足上面的需求;
  链式前向星需要一个结构体,用来赋值同时规定好next指针来连接好一条链表,同时还需要一个head数组来代表那条链表的开端,即头指针。
 

 

  vector:G[ u ][ v ]第一个维度表示某个顶点可以连接到的所有其他点(代表边),第二个维度枚举所有点
vector<int> G[maxn];
for (int i = 1; i <= m; i ++) {int u, v;cin >> u >> v;G[u].push_back(v);}

 

 
  链式前向星
int head[maxn];//每个顶点(从i出发)的第一条边(相当于头指针,指向首元结点)
struct px
{int next;//指针int to;int w;
}T[maxm*3];//注意T存的是所有边数(边的连接信息,终点,权值,下条边都在这里),无向图是2倍void Add(int x,int y,int z)//插在前面
{T[++cnt].next=head[x];//相当于链表前插法,新结点指向了头指针指的结点T[cnt].to=y;T[cnt].w=z;head[x]=cnt;//前插完成,头指针已经指向了新结点
}for(int i=head[x];i;i=T[i].next)//遍历(与某个点x连接的所有边和点)
{cout<<x<<' '<<T[i].to<<endl;//输出这条边的两个端点(x一直是一端,存的就是所有与它连接的点)cout<<T[i].w<<endl;//输出这条边的权值

}

 

 

例题引入: 图的遍历

题意:给出 N 个点,M 条边的有向图,对于每个点 v,求 A(v) 表示从点 v  出发,能到达的编号最大的点。
  1. vector存图
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 20;
vector<int> G[maxn];
int A[maxn];
int n, m;void dfs(int x, int d) {if (A[x]) return ;A[x] = d;for (int i = 0; i < G[x].size(); i ++) {dfs(G[x][i], d);}
}
int main() {cin >> n >> m;for (int i = 1; i <= m; i ++) {int u, v;cin >> u >> v;// reverse
        G[v].push_back(u);}for (int i = n; i >= 1; i --) {dfs(i, i);}for (int i = 1; i <= n; i ++) {cout << A[i] << " ";}return 0;
}

 

  2.链式前向星
 

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字母-英文字母怎么产生的:一千字带你了解字母的起源和发展

参考: https://baijiahao.baidu.com/s?id=1723733095013625072&wfr=spider&for=pc在世界历史上,约公元前3500年就出现文字,最早出现的是古埃及的象形文字,也有人说是苏美尔人的楔形文字。不过,据史料记载,两种形式的文字相差时间不长,可以说是同时产生,但两者…

redis(2)

redis的简单抽象模型:文件事件处理器===>保证redis单线程多个socket ------->>>service socket 请求--->>------->>>io多路复用程序------->>>队列------->>>文件处理分派器------->>>各种事件处理器:1.事件请求处理器…

未注册单字母域名——.top篇

服务项目技术咨询微信图书微信视频微信代码定制开发其他福利服务入口QQ群有问必答查看详情一本书解决90%问题查看详情微信开发视频小程序开发视频免费代码¥1888阿里云代金券查看详情营销工具微信特异功能

生成JavaDoc

1.第一步:首先创建一个新的文件夹。2.第二步:选中所要生成的包。3.第三步:点击键盘shift两下,搜索tools,并选择生成javadoc(Generate JavaDoc)这个选项。4.第四部:红色圈的都得写上,①然后会弹出一个界面,然后在输出目录(Output directory )输入框后面的按钮点击进…

前端框架(Front-end Framework)和库(Library)的区别

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Python glob

参考文章&#xff1a; Python 中glob.glob()、glob.iglob&#xff08;&#xff09;的使用-CSDN博客 Python 中glob.glob()的使用 glob.glob(path)的功能&#xff1a; 返回符合path格式的所有文件的路径&#xff0c;以list存储返回。 path的表示方法&#xff1a; 利用匹配符…

Unity实现GoF23种设计模式

文章目录 Unity实现GoF23种设计模式概要一、创建型模式(Creational Patterns):二、结构型模式(Structural Patterns):三、行为型模式(Behavioral Patterns):Unity实现GoF23种设计模式概要 GoF所提出的23种设计模式主要基于以下面向对象设计原则: 对接口编程而不是对实…

听GPT 讲Rust源代码--src/tools(14)

File: rust/src/tools/rust-analyzer/crates/cfg/src/lib.rs 在Rust源代码中&#xff0c;rust/src/tools/rust-analyzer/crates/cfg/src/lib.rs这个文件是Rust语言分析器&#xff08;Rust Analyzer&#xff09;的一部分&#xff0c;用于处理和管理条件编译指令&#xff08;Cond…

视频推拉流平台EasyDSS点播文件播放请求添加token验证的实现方法

EasyDSS视频直播点播平台可提供一站式的视频推拉流、转码、点播、直播、播放H.265编码视频等服务&#xff0c;搭配RTMP高清摄像头使用&#xff0c;可将设备的实时流推送到平台上&#xff0c;实现无人机视频推流直播等应用。今天我们来介绍下EasyDSS系统点播文件播放请求添加tok…

1846_安全SPI

Grey 全部学习内容汇总&#xff1a;GitHub - GreyZhang/g_embedded: some embedded basic knowledge. 1846_安全SPI SPI是一种常见的通信方式&#xff0c;在汽车电子中比较常用。但是如果涉及到安全相关的设计&#xff0c;可能得考虑更多。而SPI协议本身没有很好的标准化&am…

【AI】YOLO学习笔记

作为经典的图像识别网络模型&#xff0c;学习YOLO的过程也是了解图像识别的发展过程&#xff0c;对于初学者来说&#xff0c;也可以了解所采用算法的来龙去脉&#xff0c;构建解决问题的思路。 1.YOLO V1 论文地址&#xff1a;https://arxiv.org/abs/1506.02640 YOLO&#x…

电机的开环控制和闭环控制

目录 开环电机控制 闭环电机控制 开环到闭环转换 开环电机控制 开环控制&#xff08;也称为标量控制或伏特/赫兹控制&#xff09;是一种常见的电机控制方法&#xff0c;可用于运行任何交流电机。这是一种简单的方法&#xff0c;不需要来自电机的任何反馈。为了保持定子磁通恒…

工业性能CCD图像处理+

目录 硬件部分 ​编辑 软件部分 CCD新相机的调试处理&#xff08;更换相机处理&#xff0c;都要点执行检测来查看图像变化&#xff09; 问题:新相机拍摄出现黑屏&#xff0c;图像拍摄不清晰&#xff0c;&#xff08;可以点击图像&#xff0c;向下转动鼠标的滚轮&#xff08…

音视频技术开发周刊 | 323

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 Meta牵头组建开源「AI复仇者联盟」&#xff0c;AMD等盟友800亿美元力战OpenAI英伟达 超过50家科技大厂名校和机构&#xff0c;共同成立了全新的人工智能联盟。以开源为旗号…

Linux 中的网站服务管理

目录 1.安装服务 2.启动服务 3.停止服务 4.重启服务 5.开机自启 6.案例 1.安装服务 网址服务程序 yum insatll httpd -y 查看所有服务 systemctl list-unit-files 2.启动服务 systemctl start httpd 查看服务进程&#xff0c;确认是否启动 ps -ef|grep httpd 3.停止…

Github与Gitlab

学习目标 能够使用GitHub创建远程仓库并使用能够安装部署GitLab服务器能够使用GitLab创建仓库并使用掌握CI/CD的概念掌握蓝绿部署, 滚动更新,灰度发布的概念 GitHub是目前最火的开源项目代码托管平台。它是基于web的Git仓库&#xff0c;提供公有仓库和私有仓库&#xff0c;但私…

智能优化算法应用:基于群居蜘蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于群居蜘蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于群居蜘蛛算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.群居蜘蛛算法4.实验参数设定5.算法结果6.…

记录一次chatGPT人机协同实战辅助科研——根据词库自动进行情感分析

有一个Excel中的一列&#xff0c;读取文本判断文本包含积极情感词.txt和消极情感词.txt的个数&#xff0c;分别生成两列统计数据 请将 ‘your_file.xlsx’ 替换为你的Excel文件名&#xff0c;Your Text Column’替换为包含文本的列名。 这个程序首先读取了积极和消极情感词&…

【Hadoop_06】MapReduce的概述与wc案例

1、MapReduce概述1.1 MapReduce定义1.2 MapReduce优点1.3 MapReduce缺点1.4 MapReduce核心思想1.5 MapReduce进程1.6 常用数据序列化类型1.7 源码与MapReduce编程规范 2、WordCount案例实操2.1 本地测试2.2 提交到集群测试 1、MapReduce概述 1.1 MapReduce定义 MapReduce是一…

04-详解Eureka注册中心的作用,具体配置,服务注册和服务发现

Eureka注册中心的作用 Eureka架构 远程调用的两个问题 服务的ip地址和端口号写死: 生产环境中服务的地址可能会随时发生变化,如果写死每次都需要重新修改代码多实例问题: 在高并发的情况下一个服务可以有多个实例形成一个集群,此时如果采用硬编码的方式只能访问服务的一个实…