图的几种存储结构:

1、邻接矩阵

2、链式前向星

3、C++中vector的邻接表

(一)邻接矩阵

邻接矩阵是表示顶点之间相邻关系的矩阵。

基本思想为:

S[i][j]S[i][j]S[i][j] 就可以表示i ->(到) j有一条边内部数值可以是边权或者bool标记有无

上部为无向,下部为有向

建图什么的不就有手!!就行!!

使用实际或优劣对比:

1、方便检查任意一对定点间是否存在边

2、方便找任一顶点的所有“邻接点”(有边直接相连的顶点)

3、方便计算任一顶点的度(你遍历就完了)

对于无向图,邻接矩阵的第i行(或第i列)非零元素(或非∞元素)的个数正好是第i个顶点的度。

对于有向图,邻接矩阵的第i行(或第i列)非零元素(或非∞元素)的个数正好是第i个顶点的出度(或入度)。

for(int i=1;i<=?;i++)if(a[i][j]!=0)du[i]++;

那么劣势是啥子嘞???时空关系恐惧症!!!!

(二)链式前向星

链表的话就是可以放很多东西嘛,理解的话稍微难度大一点

1、结构安排

struct edge{int to;//  边是有向的,指向一个点 int next; //   锚定一个结点上的所有边,这个最难理解 int w;  //边权,可有可无
};

2、增边

int head[MAXN];  //记录这个点上现有最后一条边的num
int cnt;//全局,记录边的序号和个数,对于边的锚定也很重要
void  add(int from ,int to ,int w)
{e[++cnt].next=head[from];e[cnt].to=to;e[cnt].w =w;head[from]=cnt;}

此处我们cnt=0,必须先自增;

3、锚定(这个蛮难的,姬某断断续续搞的差不多,真的绝绝子)

head[cnt]
记录了当前的节点的最后一条边,也是遍历的起点

每个节点第一边next=0;第二边指向第一边————最后head[点序号]指向第N边,N找到N-1(如此往复)最终到1;

(三)vector

vector就是(一)和(二)的结合,会有压边那种struct进去的直接二维vector

简单来一下二维vector就是动态了一下子,思想没变的,把from抽离出来就好了;

1、建立

struct edge{int to;//  边是有向的,指向一个点 int w;  //边权,可有可无
}e;vector<edge>vec[MAXN];void  add(int from ,int to ,int w)
{e.to=to;e.w=w;  //借助中间变量暂时存一下vec[from].push_back(e);  //从from出发的边压了一条进去;
} 

2、遍历

for(int i=1;i<=节点数;++i)
{for (int j=0;j<vec[i].size();++j){e=vec[i][j];  //借助中间量抽出我们的目的 cout<<"从 "<<i<<" 到 "<<e.to<<" 的值为 "<<e.value<<endl;}
}

图的几种存储结构与方法(有向图+无向图)相关推荐

  1. 图1——图的五种存储结构及其初始化

    零.说明 本文中,V代表Vertex,即顶点,E代表Edge,即边.什么Vnum,Enum,firstE都按照这个来理解. 原理我是按<大话数据结构>来的,我也解释不好这个原理,就不献丑了 ...

  2. 【数据结构】图的四种存储结构

    邻接矩阵 //邻接矩阵 //分别存储两个矩阵 //一个矩阵用于存顶点的信息 //另一个矩阵用于存弧的信息 #define INFINITY 65535 #define MAX_VERTEX_NUM 2 ...

  3. 图的两种存储形式(邻接矩阵、邻接表)

    图可以使用两种存储结构,分别是邻接矩阵和邻接表. 注意:一个图所对应的邻接矩阵唯一,所对应的邻接表不唯一 一.邻接矩阵 邻接矩阵以矩阵的形式存储图所有顶点间的关系.邻接矩阵具有以下特点: 1.邻接矩阵 ...

  4. 图的两种存储方式---邻接矩阵和邻接表

    图:图是一种数据结构,由顶点的有穷非空集合和顶点之间边的集合组成,表示为G(V,E),V表示为顶点的集 合,E表示为边的集合. 首先肯定是要对图进行存储,然后进行一系列的操作,下面对图的两种存储方式邻 ...

  5. 图的数组(邻接矩阵)存储结构

    图是比较复杂的数据结构,它由顶点和顶点之间的弧或边组成.任何两个顶点之间都 可能存在弧或边.在计算机存储图时,只要能表示出顶点的个数及每个顶点的特征.每对 顶点之间是否存在弧(边)及弧(边)的特征,就 ...

  6. 数据结构大致包含以下几种存储结构:

    数据结构大致包含以下几种存储结构: 线性表,还可细分为顺序表.链表.栈和队列: 树结构,包括普通树,二叉树,线索二叉树等: 图存储结构: 线性表 线性表结构存储的数据往往是可以依次排列的,就像小朋友手 ...

  7. 图的链式存储结构解析(邻接表、逆邻接表、十字链表、邻接多重表)

    图的矩阵表示法比较消耗空间,需要花费$ n 2 n^2 n2$个单元存储边(弧).在边数较少的情况下比较浪费.我们这里来讨论图的链式存储结构. 图的链式结构主要有四类:邻接表.逆邻接表.十字链表.邻接 ...

  8. 线性表两种存储结构的不同特点及其使用场合

    线性表的两种存储结构 1.顺序结构 (1)结点中只有自身的信息域,没有关联信息域.因此,顺序存储结构的存储密度大度.存储空间利用率高. (2)通过计算地址直接访问任何数据元素,即可以随机访问. (3) ...

  9. mysql 邻接表_图的邻接表存储结构详解

    通常,图更多的是采用链表存储,具体的存储方法有 3 种,分别是邻接表.邻接多重表和十字链表. 本节先讲解图的邻接表存储法.邻接表既适用于存储无向图,也适用于存储有向图. 在具体讲解邻接表存储图的实现方 ...

最新文章

  1. 【建议收藏】Spring Boot注解全梳理!
  2. 年入50万,程序员众生相
  3. 睡个好觉的 12 条军规
  4. stm32l0的停止模式怎么唤醒_Mac外接显示器的显示模式怎么设置
  5. PWN-PRACTICE-BUUCTF-12
  6. 掌握渗透测试,从Web漏洞靶场搭建开始
  7. redis 命令别名_【死磕 Redis】 哨兵(一):部署哨兵架构
  8. php学到什么程度可以学thinkphp,thinkphp学习一
  9. ng-admin引用UEditor 插件 Angular-UEditor
  10. 接口自动化测试框架实例教程
  11. three.js视频教程2022最新
  12. Map集合常见面试题
  13. Adobe LiveCycle Designer 报表设计器
  14. wifi服务器延迟高,网络延时高(网络延迟高怎么办(家里WIFI延迟高,教你几招搞定网络延迟))...
  15. 借助Zynq RFSoC DFE解决 5G 大规模部署难题
  16. 可以将matlab安装到u盘吗,如何进行微软的office和matlab以及word等软件导入u盘
  17. 数学常用语的英文表示
  18. 4-tensorflow中张量的数学运算
  19. 实验吧CTF练习题---安全杂项---异性相吸解析
  20. Unity中文输入法不能输入问题解决

热门文章

  1. word文件太大怎么压缩变小?
  2. sympybotics机器人工具箱安装
  3. 【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)以及禁止游戏中自动锁屏问题!...
  4. 媒体定律:马航失联客机取代昆明袭击
  5. SJA1000 CAN总线verilog写的SJA1000 CAN总线控制器
  6. 崇州:鸡冠山 白塔湖 九龙沟 罨画池 陆游祠{组图及介绍}
  7. 虚拟同步发电机自适应控制策略复现
  8. locate简介及用法
  9. 机器学习——线性回归
  10. knockout示例