6.2.1 邻接矩阵

news2024/12/22 22:49:57

邻接矩阵

      • 表示方法:
      • 优点:
      • 缺点:
      • 适用情况:
      • 案例
      • 代码

邻接矩阵是一种常见的图的存储结构,用于表示图中顶点之间的连接关系。它是一个二维数组,其中行和列分别表示图中的顶点,而数组中的值表示连接顶点之间的边或权重。邻接矩阵适用于表示稠密图,其中大部分顶点之间都有连接。

表示方法:

假设图中有n个顶点,那么邻接矩阵是一个n x n的矩阵。如果图是无向图且存在边(i, j),则矩阵中的第i行第j列和第j行第i列都会标记为1或表示边的权重值。对于有向图,矩阵中的元素表示从顶点i到顶点j的边或权重。
在这里插入图片描述

优点:

  1. 对于小规模的图,邻接矩阵可以提供快速的查找和更新操作。
  2. 判断任意两个顶点之间是否存在连接的边非常高效,只需访问对应的矩阵元素即可。
  3. 对于密集图,邻接矩阵比较节省存储空间,因为它只存储了实际存在的连接关系。

缺点:

  1. 对于稀疏图,邻接矩阵会浪费大量的存储空间,因为它需要存储许多不存在的边,这会增加存储开销。
  2. 当图中的顶点数非常大时,邻接矩阵可能会占用过多的内存空间。
  3. 在添加或删除顶点时,邻接矩阵的操作可能比较费时,因为它需要调整整个矩阵的结构。

适用情况:

邻接矩阵适用于静态图或者稠密图,其中大部分顶点之间都有连接。它特别适合用于快速查找和更新顶点之间的连接关系,以及执行基于矩阵的算法,比如矩阵运算和图论算法。然而,在面对稀疏图时,邻接矩阵可能不是最优的选择,因为它会浪费大量的存储空间。

案例

让我们以一个简单的无向图为例来说明邻接矩阵的概念。

考虑以下这个无向图:

   (0)
   / \
  /   \
 /     \
(1)-----(2)
  \     /
   \   /
    \ /
    (3)

这个图有4个顶点和5条边。我们可以用邻接矩阵来表示这个图。假设顶点0到3分别表示矩阵的行和列,那么对应的邻接矩阵如下:

   | 0 | 1 | 2 | 3 |
---|---|---|---|---|
0  | 0 | 1 | 1 | 0 |
1  | 1 | 0 | 1 | 1 |
2  | 1 | 1 | 0 | 1 |
3  | 0 | 1 | 1 | 0 |

在这个矩阵中,1表示对应的顶点之间有边相连,0表示没有边相连。因为这是一个无向图,所以邻接矩阵是对称的。例如,矩阵中的(0,1)和(1,0)、(1,2)和(2,1)的值都是1,表示顶点0和1之间、1和2之间有边相连。

使用邻接矩阵,我们可以快速查找任意两个顶点之间的连接关系,并进行图的遍历和其他算法操作。同时,这个矩阵表示了图的结构,使得图的分析和处理更加直观和方便。

代码

以下是Java中实现零阶矩阵的示例代码:

public class ZeroOrderMatrix {
    private int[][] matrix;

    // 构造函数用于初始化零阶矩阵
    public ZeroOrderMatrix(int rows, int columns) {
        matrix = new int[rows][columns];
    }

    // 获取矩阵行数
    public int getRowCount() {
        return matrix.length;
    }

    // 获取矩阵列数
    public int getColumnCount() {
        if (matrix.length > 0) {
            return matrix[0].length;
        }
        return 0;
    }

    // 输出矩阵
    public void printMatrix() {
        for (int i = 0; i < getRowCount(); i++) {
            for (int j = 0; j < getColumnCount(); j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        // 创建一个3行3列的零阶矩阵
        ZeroOrderMatrix zeroOrderMatrix = new ZeroOrderMatrix(3, 3);

        // 输出矩阵
        zeroOrderMatrix.printMatrix();
    }
}

运行这段代码将输出一个3行3列的零阶矩阵:

0 0 0 
0 0 0 
0 0 0 

您可以根据需要对代码进行调整和扩展。

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

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

相关文章

工商银行卡安全码怎么看

工商银行的安全码&#xff0c;作为一项至关重要的安全措施&#xff0c;旨在保护用户的银行账户和交易安全。为了查看工商银行的安全码用户需要按照以下步骤操作&#xff1a; 首先&#xff0c;用户需要使用电脑或手机访问工商银行的网上银行平台。在平台首页&#xff0c;用户需要…

创建一个事务级临时表或者会话级临时表继续测试,在什么情况下临时表里的数据会消失

目录 一、测试事务级临时表 1、创建事务级临时表 2、插入测试数据 3、查看表中的数据 4、提交事务 5、再次查看表中数据 二、测试会话级临时表 1、创建会话级临时表 2、插入测试数据 3、查看表中的数据 4、提交事务再次查看数据 5、关闭当前会话 6、再次进入数据库…

Android发热监控实践

一、背景 相信移动端高度普及的现在&#xff0c;大家或多或少都会存在电量焦虑&#xff0c;拥有过手机发热发烫的糟糕体验。而发热问题是一个长时间、多场景的指标存在&#xff0c;且涉及到端侧应用层、手机 ROM 厂商系统、外界环境等多方面的影响。如何有效衡量发热场景、定位…

【GUI软件开发】小红书评论采集:自动采集1w多条,含二级评论!

文章目录 一、爬取目标1.1 效果截图1.2 演示视频1.3 软件说明 二、代码讲解2.1 爬虫采集模块2.2 软件界面模块2.3 日志模块 三、附完整源码及软件 一、爬取目标 您好&#xff01;我是马哥python说 &#xff0c;一名10年程序猿。 我用python开发了一个爬虫采集软件&#xff0c…

8年经验之谈 —— 性能压测工具选型对比!

本文致力于给出性能压测的概念与背景介绍&#xff0c;同时针对市场上的一些性能压测工具&#xff0c;给出相应的对比&#xff0c;从而帮助大家更好地针对自身需求实现性能压测。 为什么要做性能压测 在介绍性能压测概念与背景之前&#xff0c;首先解释下为什么要做性能压测。…

基于人群行为分析技术的AI智能公园管理系统

一、系统概括 智能公园视频监控管理系统旨在利用人群行为分析技术&#xff0c;结合先进的物联网、人工智能和大数据分析等技术手段&#xff0c;实现对公园内人流量、行为活动和安全问题的实时监测与管理。旭帆科技智能公园视频监控管理系统将通过智能视频监控、感知设备和数据…

thinkphp6 起步

1、安装 composer create-project topthink/think6.0 tp62、使用多应用模式&#xff0c;你需要安装多应用模式扩展think-multi-app composer require topthink/think-multi-app3、config/app.php中&#xff0c;将 ‘auto_multi_app’ > flase, 改为true&#xff1b; 需要自…

远程运维的定义以及优点详细讲解-行云管家

对于IT运维小伙伴而言&#xff0c;远程运维是最平常不过的一件事情了。比如下班了需要工作&#xff0c;可以远程运维就好了&#xff1b;比如帮助用户远程安装远程运维软件等等。今天我们就一起来简单聊聊远程运维的定义以及优点&#xff0c;顺便看看市面上哪款远程运维软件好用…

AUTOSAR CAN Busoff处理

Busoff产生机制 CAN通信Busoff即总线关闭态,一个CAN节点有三种状态,主动错误状态、被动错误状态以及总线关闭态。如下图可知进入Busoff的原因是因为发错错误大于255,在此状态节点不能收发报文。 单节点特殊情况 根据CAN规范,单节点发送报文NO ACK的错误也会使发送节点的T…

绕过防盗链的几种方式

需要进行防盗链的绕过&#xff0c;我们必须先要了解Iframe、Referer和XMLHttpRequest对象的基本知识 目录 Iframe 基本用法 sandbox 属性 loading 属性 Referer Referrer-policy 设置referrer的两种方法 下面举三个将referrer设置为no-referrer的例子&#xff1a; 首先…

js运算,笔试踩坑知识点

文章目录 前端面试系列运算符记住口诀先计算 后 赋值赋值从右向左 和 - -计算从左向右括号里的加减优先于括号外的乘除交换俩数的值答案 前端面试系列 js运算 笔试踩坑知识点 前端js面试题 &#xff08;三&#xff09; 前端js面试题&#xff08;二&#xff09; 前端js面试题 (…

【数据在内存中的存储】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1. 整数在内存中的存储 2. 大小端字节序和字节序判断 2.1 什么是大小端&#xff1f; 2.2 为什么有大小端? 2.3 练习 2.3.1 练习1 2.3.2 练习2 2.3.3 练习3 2.3.4 …

uniapp发行web页面在老版本浏览器打开一片空白

uniapp发行的web页面&#xff08;菜单->发行->网站-PC Web或手机H5&#xff09;&#xff0c;对于一些老的浏览器&#xff08;或内核&#xff09;&#xff0c;打开一片空白&#xff1b; 而在新版本的浏览器中打开却正常。这是因为那些版本较低的浏览器不支持ES6的语法和新…

【Windows Docker:安装nginx】

拉镜像 docker pull nginx运行初始镜像 docker run -d -p 80:80 --name nginx nginx拷贝文件 docker cp nginx:/etc/nginx/nginx.conf D:/dockerFile/nginx/nginx.conf docker cp nginx:/etc/nginx/conf.d D:/dockerFile/nginx/conf.d docker cp nginx:/usr/share/nginx/htm…

JAVA基础5:分支语句

1.流程控制 1&#xff09;流程控制语句分类 顺序结构分支结构&#xff08;if,switch)循环结构&#xff08;for,while,do...while) 2.顺序结构 顺序结构是程序中最简单最基本的流程控制&#xff0c;没有特定的语法结构&#xff0c;按照代码的先后顺序&#xff0c;依次执行&a…

WebGL-Vue3-TS-Threejs:基础练习 / Javascript 3D library / demo

一、理解Three.js Three.js是一个用于WebGL渲染的JavaScript库。它提供了一组工具和类&#xff0c;用于创建和渲染3D图形和动画。简单理解&#xff08;并不十分准确&#xff09;&#xff0c;Three.js之于WebGL&#xff0c;好比&#xff0c;jQuery.js之于JavaScript。 OpenGL …

Gated Context Aggregation Network for Image Dehazing and Deraining(GCANet)

1 总体概述 GCANet是端到端去雾的一篇代表性的文章&#xff0c;它摒弃以往使用手工设计的先验以及大气散射模型的使用&#xff0c;直接通过原始有雾图像估计出无雾图像J与有雾图像I之间的残差&#xff0c;图像恢复阶段直接使用网络输出的残差与输入有雾图像I之间的加和完成去雾…

跨境电商商城源码,支持多语言,开启全球贸易新篇章!

随着全球化的不断深入&#xff0c;跨境电商已经成为越来越多企业的选择。我们为您提供的跨境电商源码产品&#xff0c;具有强大的多语言支持功能&#xff0c;可轻松扩展至多个语言&#xff0c;助您迅速占领全球市场&#xff0c;实现业务的国际化发展。 一、多语言支持&#xff…

uniapp蓝牙搜索设备并列表展示

1.需求&#xff1a;3.0的桩可以值扫码通过蓝牙名字直接绑定&#xff0c;2.0的桩二维码无蓝牙名称则需通过蓝牙列表来绑定 2.碰到问题 1.0 蓝牙列表需要去重&#xff08;蓝牙列表通过deviceId去重再放进展示列表&#xff09; 2.0页面会卡顿&#xff08;调用my.stopBluetoothDevi…

(附源码)基于spring boot 房屋租赁系统小程序-计算机毕设 88306

spring boot 房屋租赁系统小程序 目 录 摘要 1 绪论 1.1选题意义 1.2开发现状 1.3springboot框架介绍 1.4论文结构与章节安排 2 房屋租赁系统小程序系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.…