js中的图是什么?

news2024/10/5 4:29:59

什么是图?

图是网络结构的抽象模型,是一组由边连接的节点。图可以表示任何二元关系,比如道路、航班等。在 JavaScript 中没有图,但是可以通过 Object 和 Array 来构建图。

常用操作

  • 深度优先遍历
  • 广度优先遍历

图的表示法

  • 邻接矩阵
  • 邻接表
  • 关联矩阵

  • 在这里插入图片描述

邻接矩阵

ABCDE
A01000
B00110
C00001
D10000
E00010

邻接表

并非仅限于通过对象/数组表示,其他形式也可以。

{
    "A": ["B"],
    "B": ["C", "D"],
    "C": ["E"],
    "D": ["A"],
    "E": ["D"]
}

图的深度/广度优先遍历

深度优先遍历

尽可能深的搜索图的分支。

口诀:

  1. 先访问根节点
  2. 对根节点的没访问过的相邻节点挨个进行深度优先遍历(因为相邻节点可能也会指向当前节点)
const graph = {
    A: ['B'],
    B: ['C', 'D'],
    C: ['E'],
    D: ['A'],
    E: ['D']
}

const visited = new Set()

const dfs = (n) => {
    console.log(n)

    visited.add(n)

    graph[n].forEach((item) => {
        if (!visited.has(item)) {
            dfs(item)
        }
    })
}

dfs('A') // A B C E D

广度优先遍历

先访问离根节点最新的节点。

口诀:

  1. 新建一个队列,把根节点入队
  2. 把队头出队并访问
  3. 把队头的没有访问过的相邻节点入队
  4. 重复第 2、3 步直到队列为空
const graph = {
    A: ['B'],
    B: ['C', 'D'],
    C: ['E'],
    D: ['A'],
    E: ['D']
}

const bfs = (head) => {
    const visited = new Set()

    visited.add(head)

    const q = [head]

    while (q.length) {
        const n = q.shift()

        console.log(n)

        graph[n].forEach((item) => {
            if (!visited.has(item)) {
                q.push(item)
                visited.add(item)
            }
        })
    }
}

bfs('A') // A B C D E

原文链接:菜园前端

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

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

相关文章

sql内外连接图示

student表数据: idname34name22golitter66kerwin123yh12golemon score表数据: idscore34802298663345100 内连接 1、内连接:俗称左右拼接连接; 2、内连接特点:满足连接条件的才会出现在结果里面; SELECT 查询字段…

第 7 章 集合-----Scala集合继承图

7.1.1 不可变集合继承图 7.1.2 可变集合继承图 7.2.3 不可变数组与可变数组的转换 7.7.6 复杂 WordCount 案例 1)方式一 object TestWordCount {def main(args: Array[String]): Unit {// 第一种方式(不通用)val tupleList List(("H…

WebRTC的认知入门

一、学习目的 当前的音视频聊天功能很普通,社会对这方面的需求也很高,疫情期间的在线问诊模式解决类大量急需就医问诊患者的燃眉之急,我们需要了解WebRTC实现实时音视频聊天功能是如何操作的。 二、概念 什么是WebRTC?WebRTC是 Google 在…

开放式耳机是什么意思?开放式耳机和封闭式耳机区别又有哪些?

开放式蓝牙耳机的设计理念旨在为用户提供更加自然、开放的音频体验。与传统的封闭式耳机相比,开放式耳机的设计目的是最大程度地减少音频在耳道中的阻隔,使周围环境的声音与耳机音频混合在一起,创造更加逼真的音场感。 开放式蓝牙耳机非常适合…

6.3.2 可翻页检视

前面提到的 nl 与 cat, tac 等等,都是一次性的将数据一口气显示到屏幕上面。一页一页翻动的指令就是more和less。 more (一页一页翻动) 看到上面的范例,如果more后面接的文件内容行数大于屏幕输出的行数时,就会出现类…

Hello算法笔记之回溯

一、回溯算法介绍:一种通过穷举来解决问题的方法,它的核心思想是从一个初始状态出发,暴力搜索所有可能的解决方案,当遇到正确的解则将其记录,直到找到解或者尝试了所有可能的选择都无法找到解为止。 通常采用「深度优…

【论文阅读】【yolo系列】YOLACT Real-time Instance Segmentation

论文链接:https://arxiv.org/pdf/1904.02689.pdf Abstract 我们提出了一个简单的、全卷积的实时实例分割模型, 【速度和精度】该模型在TitanXp上训练MSCOCO数据集以33.5帧ps的速度达到29.8 mAP,比以往任何竞争方法都要快得多。此外&#xff0…

chatgpt赋能python:Python连接蓝牙模块:实现IoT设备的控制

Python连接蓝牙模块:实现IoT设备的控制 随着物联网技术的不断发展,连接设备的关键变得越来越重要。Python语言是一种灵活易用、快速上手的编程语言,已经成为众多物联网应用的首选编程语言之一。其中,Python连接蓝牙模块的应用越来…

【聚类算法】MeanShift算法

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 MeanShift算法,同样是一种基于密度的聚类算法。两种算法直观理解都比较好理解。 DBSCAN:向身边人逐渐发展下线模式 MeanShfit&…

【Unity 实用插件篇】 | UI适配神器 Device Simulator 移动设备模拟器 的详细使用方法

前言 【Unity 实用插件篇】 UI适配神器 Device Simulator 移动设备模拟器 的详细使用方法一、安装Device Simulator包二、使用Device Simulator模拟各种设备三、自定义设备类型信息 总结 🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由…

windowsVNC远程桌面连接虚拟机

准本环境关闭防火墙 systemct stop firewalld setenforce 0 iptables -F 第一步虚拟机安装VNC yum -y install tigervnc-server 第二步VNC密码 vncserver 查看vnc进程和ID windows客户端 下载 VNC 服务器 |VNC 连接 (realvnc.com)

开始商业太空飞行将推动维珍银河股价上涨

来源:猛兽财经 作者:猛兽财经 总结 (1)维珍银河宣布将在6月底开始商业太空飞行,这将成为该公司的一个重要里程碑事件。 (2)太空旅游飞行市场预计将在未来十年呈指数级增长,维珍银河…

如何在Windows中启用或禁用脱机文件

脱机文件是同步中心的一项功能,即使与服务器的网络连接不可用,用户也可以使用网络文件。 用户可以使用脱机文件(如果启用)使其网络文件始终脱机可用,以便在计算机上保留存储在网络上的文件副本。这使得用户即使在未连接到网络或服务器不可用的情况下也可以与他们一起工作…

ModaHub魔搭社区:详解向量数据库Milvus的Mishards:集群分片中间件(四)

目录 Mishards 简单示例 启动示例 前提条件 启动 Milvus 和 Mishards 实例 使用 docker-compose 启动示例 Mishards 简单示例 启动示例 前提条件 安装 MilvusPython 版本 3.6 及以上 启动 Milvus 和 Mishards 实例 请按照以下步骤在单机上启动单个 Milvus 实例和 Mis…

实现数据的搜索( 筛选 )功能

搜索功能 : 可以根据搜索框对数据进行搜索, 筛选出满足条件的数据, 搜索功能主要还是后端的SQL语句的拼接, 查出满足需求的数据, 再展示给前端 前端 : 在前端我们可以在 ElementUI里获取对应的功能组件 这里与发送到后端的表单数据里的account进行绑定也就是此处我们要用accou…

【AUTOSAR】BMS开发实际项目讲解(十六)----电池管理系统系统电池单体过充保护

系统设计 /System Design 电池单体过充保护 关联的系统需求 TSR-BMS-1101、TSR-BMS-1102、TSR-BMS-1103、TSR-BMS-1104、TSR-BMS-1105、TSR-BMS-1106、TSR-BMS-1106、TSR-BMS-1107、TSR-BMS-1108、TSR-BMS-1109、TSR-BMS-1110、TSR-BMS-1111、TSR-BMS-1112、TSR-BMS-1113、TSR…

50个知识点由浅入深掌握Javascript

前言 近期整理了JavaScript知识体系,50个知识点由浅入深掌握Js建议收藏,如有问题,欢迎指正。 1. 说说你对JS的理解 1995年,布莱登艾奇(美国人)在网景公司,用10天写的一门语言。 Js是一门&…

【ArcGIS】使用ArcMap进行北京1954-120E坐标转WGS84坐标系

背景 在进行青岛地市GIS数据迁移,涉及坐标转换,经过几天摸索终于找到迁移方法 投影坐标系 北京1954-120E坐标 对应为高斯-克吕格投影 300000 3000001 0 0(青岛本地坐标) 增量:-300000 -3000001(此处为示例&#xff0c…

Python print()函数使用详解,Python打印输出

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 print() 可以「打印输出」,常用来将内…

ICV报告:2023年全球量子信息上市企业第一季度报告

ICV分析师在报告中所认定的“上市”,指的是公司公开发行股票(例如IPO)、公司在交易所挂牌交易、公司以SPAC(特殊目的收购公司)等形式进入公开交易市场,实现公司资本化并披露公司信息的情况。 报告研究的“…