讲师中心 微信公众号
AI工具推荐 视频效率加速

javascript图是什么_如何表示和搜索图的数据

酷伟吖_5977

酷伟吖_5977

发布时间:2025-12-31 22:32:02

|

621人浏览过

|

来源于php中文网

原创

JavaScript中图用邻接表(对象/Map+数组/Set)或邻接矩阵(二维数组)表示;常用DFS(递归/栈)和BFS(队列)遍历;带权图需Dijkstra等算法;开发优先选邻接表,注意有向/无向区别与序列化问题。

javascript图是什么_如何表示和搜索图的数据

JavaScript 中的“图”(Graph)是一种非线性数据结构,由顶点(Vertex/Node)边(Edge)组成,用来表示实体及其之间的关系。它不强调层级或顺序,而是灵活建模多对多、循环、路径依赖等场景,比如社交网络、网页跳转、城市路线、依赖关系图等。

图在 JavaScript 中怎么表示?

图没有原生类型,常用两种方式手动实现:

  • 邻接表(Adjacency List):用对象或 Map 存储每个顶点,值是该顶点直接连接的顶点列表(数组或 Set)。空间效率高,适合稀疏图(边少),日常开发最常用。
const graph = {
  A: ['B', 'C'],
  B: ['A', 'D'],
  C: ['A', 'D'],
  D: ['B', 'C']
};
// 或用 Map + Set 避免重复和方便增删
const graphMap = new Map();
graphMap.set('A', new Set(['B', 'C']));
graphMap.set('B', new Set(['A', 'D']));
  • 邻接矩阵(Adjacency Matrix):用二维数组(或二维布尔/数值矩阵)表示,matrix[i][j] 为 true 或权重值,表示顶点 i 到 j 是否有边。适合稠密图(边多)、需频繁查两点是否相连的场景,但空间复杂度为 O(V²)。
// 顶点按顺序映射为索引:A→0, B→1, C→2, D→3
const matrix = [
  [0, 1, 1, 0], // A 连 B、C
  [1, 0, 0, 1], // B 连 A、D
  [1, 0, 0, 1], // C 连 A、D
  [0, 1, 1, 0]  // D 连 B、C
];

图的常见搜索算法怎么写?

图搜索目标通常是遍历所有可达节点、找路径、检测环或求最短距离。核心是避免重复访问,需用集合(Set)记录已访问节点。

LedgerAI
LedgerAI

LedgerAI API智能记账——处理发票、费用分类、财务报表及收据扫描。适用于用户需要自动化记账时。

下载
  • 深度优先搜索(DFS):用递归或栈模拟。适合路径探索、连通分量、拓扑排序(有向无环图)。
function dfs(graph, start, visited = new Set()) {
  if (visited.has(start)) return;
  visited.add(start);
  console.log(start);
  for (const neighbor of graph[start] || []) {
    dfs(graph, neighbor, visited);
  }
}
  • 广度优先搜索(BFS):用队列(数组 shift 或更优的 deque 实现)。适合找无权图的最短路径、层序遍历、最小跳数问题。
function bfs(graph, start) {
  const queue = [start];
  const visited = new Set([start]);
  
  while (queue.length > 0) {
    const node = queue.shift();
    console.log(node);
    for (const neighbor of graph[node] || []) {
      if (!visited.has(neighbor)) {
        visited.add(neighbor);
        queue.push(neighbor);
      }
    }
  }
}

带权重图和更复杂需求怎么办?

如果边有权重(如距离、耗时),基础 DFS/BFS 不再适用最短路径。此时需升级算法:

立即学习Java免费学习笔记(深入)”;

  • 单源最短路径 → 用 Dijkstra 算法(要求权重非负),借助优先队列(JS 可用最小堆库或简单数组模拟);
  • 含负权边 → 用 Bellman-Ford
  • 所有点对最短路径 → 用 Floyd-Warshall(适合小规模顶点);
  • 判断是否有环 → 对有向图用 DFS 标记三种状态(未访问/访问中/已访问),或用 Kahn 算法做拓扑排序;
  • 找强连通分量(有向图)→ 用 Kosaraju 或 Tarjan 算法。

实际开发中要注意什么?

真实项目很少从零手写图算法,但理解底层很重要:

  • 优先选邻接表,除非明确需要 O(1) 边存在性查询且顶点数稳定且不大;
  • 顶点名尽量用字符串或 Symbol,避免数字索引导致歧义;
  • 处理有向图和无向图要区分:无向图加边时需双向添加(A→B 和 B→A);
  • 注意循环引用风险——JSON.stringify 图会报错,序列化时需自定义逻辑;
  • 大型图建议用成熟库,如 graphology(功能全、性能好)、cytoscape.js(侧重可视化)。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

1955

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2582

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

896

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2899

2025.09.10

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

2742

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2174

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

2612

2025.04.24

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1518

2023.08.03

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

0

2026.09.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 11.9万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn