邻接表(链式存储)实现图的存储

news2024/9/27 23:31:16

目录

一. 前言

二. 用邻接表创建无向网的完整源代码


一. 前言

        无向图邻接表的形式如下所示:

    

 其中类如v1的结点为头结点,头结点后面的结点为边结点,表示与头结点中顶点相连的边的信息。

采用邻接表创建无向网的算法思路:

1)首先输入总的顶点数和总边数

2)接着建立顶点表:依次输入顶点的信息存入到顶点表当中,并使每个表头结点的指针域初始化为NULL。

3)创建邻接表:依次输入每条边两边的顶点,然后确定两个顶点的序号n和m,建立边结点,将这个边结点分别插入到V(n)和V(m)对应的两个边链表的头部。

二. 用邻接表创建无向网的完整源代码

#include<stdio.h>
#include<iostream>
using namespace std;

//首先定义好边结点,因为会在头结点中使用到
typedef struct arcnode{    
    int adjvex;    //用来存放与头结点相连顶点的序号
    struct arcnode* nextvex;    //用来指向下一个与头结点相连边结点的指针
    int info;    //如果有权值,就设置这一项,这就是无向网和无向图的区别
}arcnode;

//定义头结点
typedef struct{
    char data;    //存放顶点
    arcnode* firstarc;    //指针指向第一个边结点
}vexnode,VL[100];    //用VL这个数组来存放所有的头结点

//定义一个邻接表
typedef struct ALGraph{
    VL vexs;    //存放所有顶点信息的VL类型数组
    int vexnum,arcnum;    //总的顶点数和边数
}

//函数声明,后面会用到
int LocateALGraph(ALGraph G,char c);

void CreateALGraph(ALGraph &G){
    //首先输入总的顶点数和边数
    cin>>G.vexnum>>G.arcnum;
    
    //接着继续输入顶点信息
    for(int i=0;i<G.vexnum;i++){
        cin>>G.vexs[i].data;
        G.vexs[i].firstarc=NULL;
    }

    //开始输入边信息
    for(int j=0;j<G.arcnum;j++){
        char v1,v2;
        cin>>v1>>v2;
        int n=LocateALGraph(G,v1);    //用两个变量来接收这两个顶点所在的序号位置
        int m=LocateALGraph(G,v2);
        arcnode* p1=new arcnode;    //创建边结点
        p1->adjvex=m;    //使用头插法将边结点放到头结点的后面
        p1->nextvex=G.vexs[n].firstarc;
        G.vexs[n].firstarc=p1;
        //因为是无向网,则需要对称存放,若是有向图或者有向网则不需要
        arcnode* p2=new arcnode;
        p2->adjvex=n;
        p2->nextvex=G.vexs[m].firstarc;
        G.vexs[m].firstarc=p2;
    }


//求G顶点表中顶点为c的顶点序号
int LocateALGraph(ALGraph G,char c){
    for(int i=0;i<G.vexnum;i++){
        if(G.vexs[i].data==c)
            return i;
        }
    return -1;
}

//可调用上面函数创建无向网的邻接表,对它进行相关操作
int main(){
    
}


        

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

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

相关文章

GPU爆显存 | Windows下杀死GPU进程释放显存

文章目录 0 问题引入1 解决方案 0 问题引入 深度学习的时候&#xff0c;用CUDA加速训练了&#xff0c;但是进程没有完全结束&#xff0c;再跑的时候爆显存了。 1 解决方案 查看当前的GPU进程 nvidia-smi通过如下命令来杀死指定的进程。 taskkill /PID PID号 /F //例如&am…

单工和双工、半双工和全双工、波特率

目录 一、单工和双工 二、半双工和全双工 三、波特率 &#x1f308;你好呀&#xff01;我是 程序猿 &#x1f30c; 2024感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限可能&#xff0c;共同成长&#xff01; 一、单工和双工 单工&#xff1a…

ComfyUI: 报EP Error错误(onnxruntime)

&#x1f936;背景描述 在使用反推提示词的时候&#xff0c;按照上一篇介绍的方法是可以正常使用的。 但是看后台的时候&#xff0c;发现有一个错误&#xff1a; *************** EP Error *************** EP Error D:\a\_work\1\s\onnxruntime\python\onnxruntime_pybind_s…

分布式领域扩展点设计稿

分布式领域扩展点设计稿 背景坐标设计理念设计图Quick Start相关组件 背景 随着交易业务和基础知识的沉淀&#xff0c;愈发觉得扩展点可以在大型交易分布式架构中可以做更多的事情。 经过一个月的思考&#xff0c;决定将 单点领域扩展点&#xff08;savior-ext&#xff09; 从…

基于SpringBoot+Vue的在线学籍管理系统(带1w+文档)

基于SpringBootVue的在线学籍管理系统(带1w文档) 基于SpringBootVue的在线学籍管理系统(带1w文档) 计算机技术快速发展的同时也促进信息化发展。当下在线学籍管理规模不断扩大&#xff0c;新型管理模式也正逐步推进&#xff0c;推动其信息化发展可以为其改革、进步提供保障。信…

AI周报(7.28-8.3)

AI应用-最小的可穿戴吊坠 AI 设备「Limitless」 Limitless的最大特点是足够小。尺寸只有31.9mm宽&#xff0c;16mm薄&#xff0c;比 AirPods 第一代&#xff08;44.3mm x 21.3mm x 53.5mm&#xff09;还要小&#xff0c;它采用一体式夹式设计&#xff0c;可固定在衣领、口袋上&…

算法小白的进阶之路(力扣9~12)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

轻触之间,静享尊贵 -- 家具缓冲器,优雅生活的守护者

在这个快节奏的时代&#xff0c;家是我们寻找宁静与舒适的空间。当您轻轻触摸门把手&#xff0c;缓缓关闭柜门&#xff0c;那一刻的宁静&#xff0c;不仅仅是一种感觉&#xff0c;它是家具缓冲器带给您的一份尊贵体验。家具缓冲器&#xff0c;就像一位无声的守护者&#xff0c;…

玩转微信公众号变现:从新手到专家的全攻略

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

C++ string(二)

目录 size()三种遍历string的方式auto迭代器capacity size() size:获取它有多少个字符 size_t size() const; int main() {string s1("hello world");size_t ret s1.size();//计算的是\0前面的字符个数cout << ret << endl;//11return 0; }三种遍历st…

【Redis】Centos 7 安装 Redis 5.0

目录 Redis重大版本 Redis 2.6 Redis 2.8 Redis 3.0 Redis 3.2 Redis 4.0 Redis 5.0 Redis 6.0 Redis 7.0 安装并启动Redis 安装scl源 安装Redis5.0 启动Redis 停止Redis Redis重大版本 Redis 借鉴了 Linux 操作系统对于版本号的命名规则&#xff1a;版本号第⼆…

C#裁剪图像的几种方法总结

前言 我们在上位机软件开发过程中经常需要裁剪图像&#xff0c;本文就是对c#中常见的裁剪图像方法进行总结。 1、克隆 直接调用Bitmap的Clone函数&#xff0c;然后指定需要裁剪的区域即可裁剪图像&#xff0c;该种方法不会损失精度 public static Bitmap CropImage_Clone(Bi…

[Bugku] web-CTF-网站被黑

1.开启环境 F12查看源代码 没有信息&#xff0c;扫描目录 扫描出shell.php 抓包尝试 使用密码字典爆破密码 得出flag

TypeScript 基础类型与类型声明

前言 在 JavaScript 中&#xff0c;变量是没有类型的&#xff0c;变量的值的类型是在运行时确定的&#xff0c;这被称为动态类型。 这意味着可以在不同的时间将不同类型的值赋给同一个变量&#xff0c;并且 JavaScript 会在运行时根据当前赋给变量的值来确定其类型。 示例&…

学生管理系统之界面设计

学生管理系统之界面设计 建立工程 新建登录界面

自动气象站:高度自动化、智能化和精准化

自动气象站&#xff0c;作为科技进步的产物&#xff0c;以其高度的自动化、智能化和精准化特点&#xff0c;极大地提升了气象观测的效率和准确性。它集成了多种高精度传感器&#xff0c;能够全天候、不间断地监测温度、湿度、气压、风速、风向、降水量等关键气象要素&#xff0…

RabbitMq架构原理剖析及应用

文章目录 RabbitMQ 架构组件1. **Broker** (Broker Server)2. **Exchange**3. **Queue**4. **Producer** (消息生产者)5. **Consumer** (消息消费者)6. **Virtual Hosts** (虚拟主机) 工作流程内部原理1. **队列管理**2. **集群**3. **持久化与内存**4. **性能优化** 高级特性1…

高德地图离线版 使用高德地图api的方法

高德离线包我已经存至Gitee&#xff08;自行下载即可&#xff09;&#xff1a;高德地图离线解决方案: 高德地图离线解决方案 然因为高德地图的瓦片地图太大&#xff0c;所以要让后端部署下 前端直接调用 如果本地 直接找到瓦片图路径就可以 initMap () {const base_url "…

基于 Kafka 的经验:AutoMQ 和 MinIO 如何解决成本和弹性挑战

Apache Kafka 因其出色的设计和强大的功能而成为流式处理的事实标准。它不仅定义了现代流式处理的架构&#xff0c;而且其独特的分布式日志抽象还为实时数据流处理和分析提供了前所未有的功能。Kafka 的成功在于它能够满足高吞吐量和低延迟的数据处理需求&#xff0c;多年来&am…

(2024|ICLR,∞-Diff,无限维平滑扩散,希尔伯特空间,超分辨率,多尺度架构)具有子采样平滑状态的无限分辨率扩散

∞-Diff: Infinite Resolution Diffusion with Subsampled Mollified States 目录 0. 摘要 1. 简介 2. 生成式神经场 3. 无限维扩散模型 3.1 平滑化&#xff08;Mollificaition&#xff09; 3.2 无限维度平滑扩散 4. 参数化扩散过程 4.1 神经算子 4.2 多尺度架构 4.3…