首页 > 其他分享 >邻接矩阵 存储图

邻接矩阵 存储图

时间:2024-03-02 18:44:19浏览次数:28  
标签:存储 指向 idx int 结点 邻接矩阵 ne 编号

存储图可以用邻接表和邻接矩阵

以下代码来自 https://www.acwing.com/blog/content/405/

// 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点
int h[N], e[N], ne[N], idx, w[N];

// 添加一条边a->b,权重是w
void add(int a, int b, int w)
{
    e[idx] = b, ne[idx] = h[a], w[idx] = w, h[a] = idx ++ ;
}

// 初始化
idx = 0;
memset(h, -1, sizeof h);

解释:
虽然是链表,但是没有用指针实现。实际上每条边都有一个编号(也就是idx),用编号来定位一条边,指向下一条边。

一个邻接表需要两种数据,一个是头结点,一种是边结点。头结点a指向边结点b,表示一条边a --> b

在这里头结点的结构是一个数组:i表示某点;h[i]是从i出发的一条边的编号,也就是指向了这条边。
边结点的结构:j表示某条边的编号;e[j]是这条边的终点;w[j]是这条边的权重;ne[j]是该结点指向的下一条边的编号。
idx是边的编号,和头结点一点关系都没有。

下面解释add函数的内容。这里使用的是头插法(实际上也不好用尾插法):

//插入一条a->b,权重为w的边
//处理边节点
e[idx] = b,w[idx] = w; //初始化边结点的终点和权重
ne[idx] = h[a];        //让新的边结点的next也指向h[a]指向的那条边
//处理头结点
h[a] = idx ++ ;        //让头结点指向新的边

标签:存储,指向,idx,int,结点,邻接矩阵,ne,编号
From: https://www.cnblogs.com/okljlwi/p/18049059

相关文章

  • scrapy——分别存储在文本文件和mysql数据库中
    笔记如何将爬取到的数据一份存储到本地一份存储到数据库?-创建一个管道类-爬虫文件提交到的item指挥给管道文件中的第一个被执行的管道类接收-process_item方法中的returnitem表示将item提交给下一个管道类在pipelines类中加入MysqlPiplines类#Defineyour......
  • scrapy——基于管道持久化存储
    笔记-基于管道:-编码流程-数据解析-在item类中定义相关的属性-将解析的数据封装到item对象中-将item类型的对象提交给管道进行持久化存储-在管道类的process_item中要将其接收到的item对象中存储的数据进行持久化存储......
  • scrapy——终端持久化存储
    笔记-基于终端指令:-要求:只可以将parse方法的返回值存储到本地的文本文件中scrapycrawldou-o./douban.csv-注意:持久化存储的类型只可以是'json','jsonlines','jsonl','jl','csv','xml','marshal','pickle'这些......
  • Spectrum高速采集存储系统
    产品简介:♦连续(无丢失)数据记录♦传输度高达3GByte/s♦一体化系统解决方案♦从1到32T的数据存储空间♦单发和多(分段)倍记录模式更多信息请加weixin-pt890111获取连续(无丢失)数据记录可保证的传输流速高达3GByte/s一体化系统解决方案从1到32T的数据存储空间单发和多倍......
  • docker更换存储路径
    方案一:创建或修改`daemon.json`文件。在Docker1.12或以上版本中,可以通过创建或修改`/etc/docker/daemon.json`文件来指定新的存储路径。例如,在文件中添加`"data-root":"/home/docker"`,然后重启Docker服务。345方案二:使用软链接。首先,停止Docker服务,移动现有的`/......
  • 【Serverless】云存储新建账号无法创建存储实例解决方案
    ​ 【问题描述】一些开发者想要使用AGC云存储服务,在开通服务后,需要创建一个存储实例,但是在点击创建按钮时,出现了未知错误的报错提示,创建失败。​【解决方案】获取到了开发者的浏览器报错日志后,发现了在创建Bucket时返回了“138012:invokeqmserror”的错误。​​随后在咨询......
  • C++static 存储类
    1#include<iostream>23//函数声明4voidfunc(void);56intmain()7{8intcount=10;9while(count--)10{11func();12std::cout<<",变量count为"<<count<<std::endl;13......
  • SQL Server存储过程
    SQLServer中视图通过简单的SELECT查询来解决复杂的查询,但是视图不能提供业务逻辑功能,而存储过程可以办到这点。什么是存储过程?存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。存储过程中可......
  • 【C++】Mat和Pat希望邀请他们的朋友来参加派对。他们要编写一个程序完成下面的任务。
    Mat和Pat希望邀请他们的朋友来参加派对。他们要编写一个程序完成下面的任务。让Mat输入他朋友的姓名列表。姓名存储在一个容器中,然后按排列后的顺序显示出来。让Pat输入她朋友的姓名列表。姓名存储在另一个容器中,然后按排列后的顺序显示出来。创建第三个容器,将两个列表合并,删除重......
  • nas存储
    参考文档:文件存储NAS一、nas是什么NAS全称为NetworkAttachedStorage(网络附属存储),简单理解就是专门用来存储数据、且可以连接网络的一种存储设备。NAS主要特点是将存储与服务器相分离,抛开传统服务器运行带宽压力,集中做数据管理部分,从而实现低成本、高效率的数据存储。它是一种......