数据结构-图的存储结构-邻接矩阵

        图的结构十分复杂,不仅各个结点的度不同,各个顶点之间的路径也不尽相同。但是图的主要组成部分比较清晰,分为顶点信息和边或者弧的信息。

        邻接矩阵

        邻接矩阵就是用一维数组存储图中顶点的信息,用一个二维数组表示图中各个顶点之间的邻接关系的信息,而这个二维数据就是邻接矩阵。

        假设图G=(V,E)n个确定的顶点,即V=(v_{0},v_{1},v_{2},...,v_{n-1}),则表示G中个顶点相邻关系为一个n\times n的矩阵,矩阵的元素为

A[i][j]=\left\{\begin{matrix} 1 & \\ 0 & \end{matrix}\right.

         其中,顶点ij之间有边或者弧时为1,顶点ij之间没有边或者弧时为0

        如果G是带权图,则有定义

A[i][j]=\left\{\begin{matrix} w_{ij} & \\ 0 & \\ \infty & \end{matrix}\right.

         其中,顶点ij之间有边或者弧且权值为w_{ij}时为w_{ij},对角线元素(i=j)为0,顶点ij之间没有边或者弧为\infty

 无向图的邻接矩阵表示

        邻接矩阵的特点

         (1)无向图的邻接矩阵一定是一个对称矩阵。因此再存储邻接矩阵时只需存储上或者下的三角矩阵的元素即可。有向图的邻接矩阵不一定时对称矩阵。

        (2)无向图的邻接矩阵的第i行(或第i列)非零元素(或非\infty元素)的个数正好是第i个顶点的度D(v_{i})

        (3)有向图的邻接矩阵的第i行(或第i列)非零元素(或非\infty元素)的个数正好是第i个顶点的出度OD(v_{i})(或入度ID(v_{i})

        (4)用邻接矩阵方法存储图,很容易确定图中任意两个顶点之间是否有边相连。要确定图中的边的个数,必须按行、列对每个元素进行检测。

        (5)邻接矩阵存储稀疏图会浪费时间和空间。所以邻接矩阵适合存储稠密图。

        邻接矩阵的存储算法

        邻接矩阵的表示

        由上面的定义得知在邻接矩阵的结构体中,不仅需要表示邻接矩阵的二维数组,还需要一个一维数组存储顶点信息。

const int M = 500;
typedef struct{        
    char ver[M];            //顶点表
    int edg[M];            //边表,即邻接矩阵
    int vernum,edgnum;     //顶点数和边数
}MGraph;

        邻接矩阵的创建

const int INF = 0x7f7f7f;

void CreatG(MGraph *G)
{
    int ver1,ver2,w;
    scanf("%d%d",&(G->vernum),&(G->edgnum));    //输入顶点数和边数
    for(int i = 0;i<G->vernum;i++)
        scanf("%c",&(G->ver[i]));               //输入顶点信息,建立顶点表
    /*创建无向图的邻接矩阵*/
    memset(G->edg,0,sizeof (G->edg));           //初始化邻接矩阵                 
    for(int i = 0;i<G->edgnum;i++)
    {
        scanf("%d%d",&ver1,&ver2);              //输入边,建立邻接矩阵
        G->edg[i][j] = 1;                       //无向图的邻接矩阵
    }
    /*创建带权图的邻接矩阵*/
    for(int i = 0;i<G->edgnum;i++)              //初始化邻接矩阵
        for(int j = 0;j<G->edgnum;j++)
        {
            if(i == j)
                G->edg[i][j] = 0;
            else
                G->edg[i][j] = INF;
        }
    for(int i = 0;i<G->edgnum;i++)
    {
        scanf("%d%d%d",&ver1,&ver2,&w);         //输入边和权值,建立邻接矩阵
        G->edg[i][j] = w;                       //有权值图的邻接矩阵
    }
}

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

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

相关文章

探索“联宝360”:社交电商领域的新星及其商业模式分析

亲爱的朋友们&#xff0c;大家好&#xff01;我是吴军&#xff0c;在互联网行业里摸爬滚打多年&#xff0c;专注于新兴商业模式的探索和研究。最近&#xff0c;一个备受瞩目的项目“联宝360”在社交电商领域崭露头角&#xff0c;其背后的推动者&#xff0c;倪振达及其团队。 在…

HTML【介绍】

HTML【介绍】 一、Web认知 1.网页组成 文字、图片、音频、视频、超链接 2.五大浏览器 IE浏览器、火狐浏览器&#xff08;Firefox&#xff09;、谷歌浏览器&#xff08;Chrome&#xff09;、Safari浏览器、欧朋浏览器&#xff08;Opera&#xff09; 3.Web标准的构成 HTML…

打破生态「孤岛」,Catizen将开启Telegram小游戏2.0时代?

Catizen&#xff1a;引领Telegram x TON生态的顶级猫咪链游 在区块链游戏领域&#xff0c;吸引玩家的首要因素往往是游戏的趣味性。然而&#xff0c;仅靠趣味性无法评估一个项目的长期价值和发展潜力。真正能在区块链游戏市场中取得长久成功的项目&#xff0c;无一例外都依靠扎…

Python25 Numpy基础

1.什么是Numpy NumPy&#xff08;Numerical Python 的简称&#xff09;是 Python 语言的一个扩展程序库&#xff0c;支持大量的维度数组与矩阵运算&#xff0c;此外也针对数组运算提供大量的数学函数库。NumPy 的前身是 Numeric&#xff0c;这是一个由 Jim Hugunin 等人开发的…

局域网聊天软件 matrix

窝有 3 只 Android 手机 (3 号手机, 6 号手机, 9 号手机), 2 台 ArchLinux PC (4 号 PC, 6 号 PC), 1 台 Fedora CoreOS 服务器 (5 号). (作为穷人, 窝使用的基本上是老旧的二手设备, 比如 5 年前的手机, 9 年前的笔记本, 10 年前的古老 e5v3 主机, 都比较便宜. ) 窝经常需要 …

【Git】安装与常用命令

一、Git环境配置 二、获取本地仓库 三、基础操作指令 四、分支 Git Bash 使用到基本 Linux 命令 在使用 Git 进行版本控制时&#xff0c;经常需要在 Git Bash 或其他终端中使用一些基本的 Linux 命令。以下是常见的 Git 命令和基本的 Linux 命令示例。 基本 Linux 命令 ls/ll…

无线麦克风推荐哪些品牌,一文揭秘无线麦克风领夹哪个牌子好!

​究竟该如何选择麦克风呢&#xff1f;又该如何挑选无线麦克呢&#xff1f;询问我关于麦克风选择问题的人着实不少。对于那些仅仅是想要简单地自我娱乐的朋友而言&#xff0c;着实没必要去折腾&#xff0c;直接使用手机自带的麦克风便可以了。 但若是处于想要直播、拍摄短视频…

FPGA PCIe加载提速方案

目录 1.bit流压缩 2.flash加载速度 3.Tandem模式 1.bit流压缩 set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] 2.flash加载速度 打开bitstream setting&#xff0c;设置SPI的线宽和速率&#xff08;线宽按原理图设置&#xff0c;速率尽可能高&#xff09…

async异步函数

文章目录 异步函数&#xff08;用 async 声明的函数&#xff09;异步函数的返回值async/await 的使用异步函数的异常处理总结 感谢铁子阅读&#xff0c;觉得有帮助的话点点关注点点赞&#xff0c;谢谢&#xff01; 异步函数&#xff08;用 async 声明的函数&#xff09; 异步函…

电阻代码的谐音助记口诀

整理电子信息的课设&#xff0c;发现当时的笔记&#xff0c;记录一下&#xff0c;时间过得真快啊。 01234黑棕红橙黄 56789绿蓝紫灰白 银色和金色代表误差&#xff0c; 银色百分之十 金色百分之五 可以这么理解&#xff0c;运动会奖牌&#xff0c;金牌比银牌等级高&#xff…

Django(根据Models中模型类反向生成数据库表)—— python篇

一、数据库的配置 1、 django默认支持 sqlite&#xff0c;mysql, oracle,postgresql数据库。 sqlite&#xff1a;django默认使用sqlite的数据库&#xff0c;默认自带sqlite的数据库驱动 , 引擎名称&#xff1a;django.db.backends.sqlite3 mysql&#xff1a;引擎名称&#xff…

python实训day5

1、 from ming import getconn conn getconn("gaoming") print() sql [("select * from dept", ()),#"dept"的表中选择所有列("delete from person where sid<%s", (4,)),#删除"person"表中"sid"列小于4的记…

【JavaScript】JS对象和JSON

目录 一、创建JS对象 方式一&#xff1a;new Object() 方式二&#xff1a;{属性名:属性值,...,..., 方法名:function(){ } } 二、JSON格式 JSON格式语法&#xff1a; JSON与Java对象互转: 三、JS常见对象 3.1数组对象API 3.2 其它对象API 一、创建JS对象 方式一&#xff1a;new…

君諾外匯:为什么巴菲特现在加倍下注油气股票?油价上涨是主因吗?

近年来&#xff0c;以巴菲特为代表的一些顶级投资者开始在能源领域加大投资力度&#xff0c;特别是油气股票。这一转变引发了广泛关注&#xff0c;特别是在油价上涨的背景下。本文将Juno markets外匯深入分析巴菲特投资策略的变化原因&#xff0c;探讨其在能源市场的布局及未来…

如何用Vue3和Plotly.js实现一个动态3D图的在线展示

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 基于 Plotly.js 的交互式图表动画 应用场景 本代码演示了如何使用 Plotly.js 创建交互式图表动画&#xff0c;其中一个区域填充的区域在给定时间间隔内更新其数据。这种动画可用于可视化时间序列数据或展示数…

冷门赛道,视频号励志语录赛道详解,新手轻松上手

大家好&#xff0c;我是闷声轻创&#xff0c;在当今数字化时代&#xff0c;社交媒体已成为人们获取信息、分享生活和实现个人价值的重要渠道。视频号&#xff0c;作为新兴的短视频平台&#xff0c;以其独特的优势和巨大的流量潜力&#xff0c;吸引了众多创作者的目光。今天我将…

华为畅享系列多款产品升级HramonyOS 4.2版本,一篇带你解读

最近华为畅享系列多款手机陆续迎来了HarmonyOS 4.2新版本&#xff0c;华为畅享70S、华为畅享70 Pro、华为畅享60X、华为畅享60 Pro和华为畅享50 Pro都在升级计划中。这次升级的4.2版本不仅功能强大&#xff0c;重点是好玩又实用&#xff0c;速来围观&#xff01; 那本次升级版本…

基于JSP的水果销售管理网站

开头语&#xff1a;你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;B/S架构 系统展示 首页 管理员功能模块 用户前…

使用原子子表创建可重用的子组件

原子子表是一个图形对象&#xff0c;可帮助您在Stateflow图表中创建独立的子部件。原子子表允许&#xff1a; 对具有多个状态或层次结构的图表进行微小更改后&#xff0c;模拟速度更快。 在多个图表和模型中重复使用相同的状态或子表。 易于团队开发&#xff0c;适用于在同一图…

聊一聊UDF/UDTF/UDAF是什么,开发要点及如何使用?

背景介绍 UDF来源于Hive&#xff0c;Hive可以允许用户编写自己定义的函数UDF&#xff0c;然后在查询中进行使用。星环Inceptor中的UDF开发规范与Hive相同&#xff0c;目前有3种UDF&#xff1a; A. UDF--以单个数据行为参数&#xff0c;输出单个数据行&#xff1b; UDF&#…