数据结构:图的存储与遍历(待续)

        图(Graph)是一种较线性表和树更为复杂的非线性结构。在图结构中,对结点(图中常称为顶点)的前驱和后继个数不加限制, 即结点之间的关系是任意的。

一、基本概念和一般结论

13477d960fab4f0daf6e0470456f7a54.png
因为一条边关联两个顶点,而且使得这两个顶点的度数 分别增加1。因此顶点的度数之和就是边的两倍。

6cf67d371ede449e9043f50c392ed36f.png

关于连通图:

b669c912b6164173b42df7b7f7feda68.png

dad206945a8a4300b0670bd27c7b127f.png

无向图:连通图,连通子图,极大连通子图(连通分量,即一个图中最大的某个连通子图,即无法增加顶点以及边 使其构成更大的连通图)

有向图:强连通图,强连通子图,强连通分量。

连通分量不一定唯一。

二、图的存储结构

(1)邻接矩阵

6f57cc288c1f4f9a8e28d2783b1a24b4.png

邻接矩阵可以方便求出图中顶点的度:

对于邻接矩阵的第i行,如果其第j列有一个1(或者一个权值),则说明有一条边从vi指向vj。如果是有向图,则表示存在一条边<vi,vj>,通过行可以看出出度,通过列可以看出入度。


(2)邻接表

f6ca0085a9894a18bd46fa5ea8dffad1.pngcb53ffaf68c14e19967c0cf6b82f24f2.png

        总的来说就是,顺序存储图中的所有顶点信息,每个顶点信息包括顶点编号(也可以不用,因为顺序存储用数组标识的话,数组位置就是顶点编号),以及顶点的边链表头结点指针。一个顶点的边链表是将 以该顶点为起始的 连向的其他顶点信息。

       有向图的邻接表,边链表结点个数等于有向边的条数。(因为每条有向边有且仅有一个起始和一个终止)

        无向图的邻接表,边链表结点个数等于无向边的条数*2。(无向边是双向的)

7a5ff73cae74411e9ffe15ea88e1449b.png

struct Edge{//边链表结点
    int VerName;//顶点编号
    int cost;//边权值
    Edge *next;//指向下一个边链表结点
}
struct Vertex{//顶点表结点
    int VerName;//顶点编号
    Edge * adjacent;//边链表指针
}

(3)链式前向星

        实际上就是使用静态链表实现的邻接表。数据结构:静态链表(编程技巧)-CSDN博客

这样做的好处是,不需要使用指针,也不需要使用指针访问,直接通过数组下标即可访问,速度更快,内存更少。

插入表尾:

vector<int> head(n,-1);//n个顶点,head[i]指向边链表,初始都没有
vector<int> VerName;//边链表,adjacent[i]存的是边链表顶点信息
vector<int> next;//边链表的指针信息
vector<int> cost;//边的权值
/*可以理解为:
struct head{
    Edge* head[i];//head[i]表示的是第i个顶点的边链表表头。这里实际上是一个下标
}
struct Edge{//他们仨 下标是一样的
    int VerName;
    Edge* next;
    int cost;
};
*/
int Vertex;
int edge;
int cos;

while(cin>>Vertex>>edge>>cos){//假定输入都是正确的,没有重边
    //为了复杂化,我们先找到边链表的最后一个结点
    int adj=head[Vertex];
    if(adj!=-1)
        while(next[adj]!=-1){
            adj=next[adj];
        }
    /*创建一个新结点 其之后无指向即next=-1*/
    VerName.push_back(edge);
    next.push_back(-1);
    cost.push_back(cos);
    /*-adj为Vertex边链表的最后一个元素-*/
    if(adj!=-1)
        next[adj]=next.size()-1;//VerName.size()-1、cost.size()-1均可 就是指向最后一个嘛。
    if(adj==-1){//只可能是顶点还没有边
        head[Vertex]=next.size()-1;
    }
}

//顺次输出边
for(int i=0;i<n;++i){
    int adj=head[i];
    while(adj!=-1){
        cout<<i<<"--->"<<VerName[adj]<<"  cost为:"<<cost[adj]<<endl;
        adj=next[adj];
    }
}
//我们会发现,将adj当做一个结构体指针Edge *,那么VerName[adj]相当于adj->VerName了

直接插入表头:

while(cin>>Vertex>>edge>>cos){/*直接创建点,插入在Vertex的边链表表头*/
    VerName.push_back(edge);
    next.push_back(head[Vertex]);
    cost.push_back(cos);
    head[Vertex]=next.size()-1;
}

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

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

相关文章

计算机服务器中了devos勒索病毒怎么解密,devos勒索病毒解密工具流程

随着网络技术的不断发展与更新&#xff0c;越来越多的企业利用网络开展了各项工作业务&#xff0c;网络也为企业提供了极大便利&#xff0c;大大提高了办公效率。但网络是一把双刃剑&#xff0c;企业的数据安全问题一直是企业关心的主要话题&#xff0c;近日&#xff0c;云天数…

如何在Windows搭建WebDav服务,并外网可访问

目录 1. 安装IIS必要WebDav组件 2. 客户端测试 3. 使用cpolar内网穿透&#xff0c;将WebDav服务暴露在公网 3.1 打开Web-UI管理界面 3.2 创建隧道 3.3 查看在线隧道列表 4. 公网远程访问 4.1 浏览器访问测试 4.2 映射本地盘符访问 4.3 安装Raidrive客户端 总结&…

由世界第一个AI软件工程师Devin引发的热潮背后----程序员到底会不会被代替?AI发展至如今是否初衷已变?

目录 一.Devin的登场是突破也是导火索 二.Devin的"逆天"能力 1、端到端构建和部署程序 2、自主查找并修复bug 3、训练和微调自己的AI模型 4、修复开源库 5、成熟的生产库也能做贡献 6、学习能力 三.Devin的出现甚至整个AI领域的进步,编程还有未来吗? 1.业…

机试:蛇形矩阵

问题描述: 代码示例: //蛇形矩阵 #include <bits/stdc.h> using namespace std;int main(){int n;cout << "输入样例" << endl; cin >> n;int k 1; for(int i 0; i < n; i){if( i %2 0){//单数行for(int j 0; j < n; j){ cout &…

国际前十正规外汇实时行情走势app软件最新排名(综合版)

外汇交易&#xff0c;作为当今世界金融市场上一个重要的板块&#xff0c;备受关注和热议。随着金融市场的日益发展&#xff0c;外汇交易也发展成为一个新兴的投资交易渠道。为了更好地满足投资者对外汇市场的需求&#xff0c;外汇实时行情走势app软件应运而生&#xff0c;它为投…

字符指针

1、字符指针 在指针的类型中我们知道有一种指针类型为字符指针 char* 一般使用方式&#xff1a; 还有使用方式如下&#xff1a; 注意观察区别&#xff1a;%C 与 %S &#xff1a; 这种方式是将字符串的首地址放到指针中&#xff0c;通过指针可以找到该字符串&#xff08;千万不要…

配置华为交换机环路检测案例

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; ①微思网络&#xff0c;始于2002年&#xff01;专注IT认证培训22年。 ② 领取学习资料/课程咨询&#xff1a;小美老师&#xff08;wx&#xff09;&…

使用采购管理软件构建更高效的采购模式

采购流程是企业整个采购部门的关键要素。无论企业规模大小&#xff0c;构建采购流程的模式都将直接影响企业控制成本、管理风险和保持流程弹性的能力。 下面我们将解释采购模式的类型、优缺点&#xff0c;以及如何确定哪种模式最适合你的采购部门。 集中采购的优缺点 在集中采…

关于腾讯云服务器“地域”选择,地域四点因素请牢记!

腾讯云服务器地域怎么选择&#xff1f;不同地域之间有什么区别&#xff1f;腾讯云哪个地域好&#xff1f;地域选择遵循就近原则&#xff0c;访客距离地域越近网络延迟越低&#xff0c;速度越快。腾讯云百科txybk.com告诉大家关于地域的选择还有很多因素&#xff0c;地域节点选择…

关于nginx做正向代理的那些事

声明&#xff1a;该文章只是用于技术探索的实践与讨论&#xff0c;没有其他用途。 准备&#xff1a; 一台能访问外网的服务器&#xff1b;一个域名&#xff0c;映射到上面的服务器&#xff1b;https的证书及密钥&#xff1b;nginx安装包&#xff1b; 协议使用&#xff1a; 开…

neo4j网页无法打开,启动一会儿后自动关闭,查看neo4j status显示Neo4j is not running.

目录 前情提要User limit of inotify watches reached无法访问此网站 前情提要 公司停电&#xff0c;服务器未能幸免&#xff0c;发现无法访问此网站&#xff0c;http://0.0.0.0:7474 在此之前都还好着 User limit of inotify watches reached (base) [rootlocalhost ~]# n…

ctf_show笔记篇(web入门---sql注入)171-189

sql注入 171&#xff1a;简单的sql注入&#xff0c;尝试万能密码直接过 172&#xff1a;基础联合查询可过 173&#xff1a;过滤flag那就利用substr少取几个flag的名字或者replace 174&#xff1a;两种方法&#xff0c;使用盲注或者利用replace嵌套替换&#xff0c;然后在逆…

新 树莓派4B 温湿度监测 基于debian12的树莓派OS

前言 本文旨在完成通过外接温湿度传感器至树莓派使得树莓派不断记录并存储温湿度数据 这个领域有很多文章&#xff0c;但是部分文章已经缺乏了时效性&#xff0c;在最新系统不适用&#xff0c;本文目前适用 硬件 硬件连接 温湿度传感器常选用DHT11和DHT22&#xff0c;淘宝…

No transform from [base_footprint] to [base_link]

需要查看这两个坐标系之间的转换 果然&#xff0c;demo05_car_base中父坐标系是base_footprint&#xff0c;意思是从base_footprint到base_link的转换&#xff0c;而不是从固定坐标系base_link到base_footprint 修改&#xff1a; 父坐标系修改成base_link即可

1356:计算(calc)

【算法分析】解法1&#xff1a;中缀表达式直接求值 1、设数字栈、运算符栈。设数组表示运算符优先级&#xff0c;其中(优先级最高&#xff0c;)优先级最低。 从左向右扫描表达式字符串&#xff1a; 2、遇到数字时&#xff0c;入数字栈。 3、遇到运算符时&#xff0c;入栈条件为…

20240314一种各向同性负泊松比多孔材料的设计

Design of a porous material with isotropic negative Poisson’s ratio DOI&#xff1a;http://dx.doi.org/10.1016/j.mechmat.2016.02.012 摘要&#xff1a;本文提出了一种具有全方位负泊松比的二维多孔体的设计方法。孔隙的六边形周期性分布使力学性能&#xff08;泊松比…

计算机msvcr120.dll丢失怎样修复,教你5种方法轻松搞定

我们在玩游戏运行软件的时候&#xff0c;电脑系统提示无法启动此程序&#xff0c;因为计算机中丢失MSVCR120.dll&#xff0c;尝试重新安装该程序以解决此问题。究其原因&#xff0c;是由于在我们的计算机系统中&#xff0c;发现缺失了一个至关重要的动态链接库文件——MSVCR120…

国外visa卡怎么办理,可充ChatGPTPLUS、Claude、Midjourney

很多小伙都在使用ChatGPT&#xff0c;但是想充值ChatGPTPLUS缺需要国外的visa卡&#xff0c;拿自己的银联卡&#xff0c;尝试了好多次还是不行&#xff0c;其实用一张国外的visa卡几分钟就可以升级好 办理国外visa卡&#xff0c;点击获取 国外的visa卡&#xff0c;具体要看你…

rtsp流实现web端实时播放(海康+大华)

最近的电力项目需要嵌入海康摄像头画面&#xff0c;之前没有做过类似的流媒体播放&#xff0c;所以有些懵&#xff1b; 海康开放平台的webAPI&#xff0c;有插件还是无插件&#xff0c;都不适合自研web系统的嵌入&#xff0c;所以需要自己进行解流&#xff1b; 首先&#xff0c…

火山引擎VeDI:A/B实验如何应用在APP推荐系统中?

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 在移动互联网飞速发展的时代&#xff0c;用户规模和网络信息量呈现出爆炸式增长&#xff0c;信息过载加大了用户选择的难度&#xff0c;这样的背景下&#xff0c;推…
最新文章