- 70
- 0
- 共 0 条
- 全部回答
-
抹茶味的百奇 普通会员 1楼
在JavaScript中,邻接矩阵是一种用于存储有向图的数据结构。邻接矩阵是一种二维数组,其中的每个元素表示一个顶点及其周围的边的数量。
在JavaScript中,可以使用如下方式优化邻接矩阵的存储和赋值:
- 使用 Set:
可以使用Set数据结构来存储邻接矩阵,因为Set不会重复添加元素,所以可以避免重复的边。
javascript let adjMatrix = new Set(); // 添加边 adjMatrix.add([0, 1, 0]); adjMatrix.add([1, 0, 0]); adjMatrix.add([0, 0, 1]); adjMatrix.add([1, 1, 0]); adjMatrix.add([0, 1, 1]); // 获取边 let edges = adjMatrix.has([0, 1]) ? adjMatrix.get([0, 1]) : null; // 保存邻接矩阵 adjMatrix.set([0, 1, 0]); adjMatrix.set([1, 0, 0]); adjMatrix.set([0, 0, 1]); adjMatrix.set([1, 1, 0]); adjMatrix.set([0, 1, 1]); // 删除边 adjMatrix.delete([0, 1]); adjMatrix.delete([1, 0]); adjMatrix.delete([0, 0]); adjMatrix.delete([1, 1]); adjMatrix.delete([0, 1]); // 获取邻接矩阵 edges = adjMatrix.has([0, 1]) ? adjMatrix.get([0, 1]) : null; // 获取顶点 let vertices = adjMatrix.has([0, 1]) ? adjMatrix.get([0, 1]) : null; // 保存顶点 vertices.set([0, 1]); vertices.set([1, 0]); vertices.set([0, 0]); vertices.set([1, 1]); vertices.set([0, 1]); // 保存顶点 vertices.set([0, 1]); vertices.set([1, 0]); vertices.set([0, 0]); vertices.set([1, 1]); vertices.set([0, 1]); // 保存顶点 vertices.set([0, 1]); vertices.set([1, 0]); vertices.set([0, 0]); vertices.set([1, 1]); vertices.set([0, 1]); // 保存顶点 vertices.set([0, 1]); vertices.set([1, 0]); vertices.set([0, 0]); vertices.set([1, 1]); vertices.set([0, 1]); // 保存顶点 vertices.set([0, 1]); vertices.set([1, 0]); vertices.set([0, 0]); vertices.set([1, 1]); vertices.set([0, 1]);- 使用 Map(数组或对象):
可以使用Map(数组或对象)来存储邻接矩阵,因为Map可以按照键值对的方式存储元素,这样可以避免重复的边。
javascript let adjMatrix = new Map(); // 添加边 adjMatrix.set([0, 1], 1); adjMatrix.set([1, 0], 0); adjMatrix.set([0, 0], 2); adjMatrix.set([1, 1], 1); adjMatrix.set([0, 1], 2); // 获取边 let edges = adjMatrix.has([0, 1]) ? adjMatrix.get([0, 1]) : null; // 保存邻接矩阵 adjMatrix.set([0, 1], 1); adjMatrix.set([1, 0], 0); adjMatrix.set([0, 0], 2); adjMatrix.set([1, 1], 1); adjMatrix.set([0, 1], 2); // 删除边 adjMatrix.delete([0, 1]); adjMatrix.delete([1, 0]); adjMatrix.delete([0, 0]); adjMatrix.delete([1, 1]); adjMatrix.delete([0, 1]); // 获取邻接矩阵 edges = adjMatrix.has([0, 1]) ? adjMatrix.get([0, 1]) : null; // 获取顶点 let vertices = adjMatrix.has([0, 1]) ? adjMatrix.get([0, 1]) : null; // 保存顶点 vertices.set([0, 1]); vertices.set([1, 0]); vertices.set([0, 0]); vertices.set([1, 1]); vertices.set([0, 1]); // 保存顶点 vertices.set([0, 1]); vertices.set([1, 0]); vertices.set([0, 0]); vertices.set([1, 1]); vertices.set([0, 1]); // 保存顶点 vertices.set([0, 1]); vertices.set([1, 0]); vertices.set([0, 0]); vertices.set([1, 1]); vertices.set([0, 1]); // 保存顶点 vertices.set([0, 1]); vertices.set([1, 0]); vertices.set([0, 0]); vertices.set([1, 1]); vertices.set([0, 1]);- 使用循环队列:
可以使用循环队列(数组或对象)来存储邻接矩阵,因为循环队列可以按照元素的添加和删除顺序存储元素。
javascript let adjMatrix = new Map(); // 添加边 adjMatrix.set([0, 1], 1); adjMatrix.set([1, 0], 0); adjMatrix.set([0, 0], 2); adjMatrix.set([1, 1], 1); adjMatrix.set([0, 1], 2); // 添加元素到循环队列 let queue = new Array(3); queue[0] = [0, 1]; queue[1] = [1, 0]; queue[2] = [0, 0]; queue[0].push([0, 1]); queue[1].push([1, 0]); queue[2].push([0, 0]); // 遍历循环队列 for (let i = 0; i < 3; i++) { let [v, e] = queue[i]; // 保存顶点 vertices.set(v); edges.set(e); } // 删除边 adjMatrix.delete([0, 1]); adjMatrix.delete([1, 0]); adjMatrix.delete([0, 0]); adjMatrix.delete([1, 1]); adjMatrix.delete([0, 1]); // 获取邻接矩阵 edges = adjMatrix.has([0, 1]) ? adjMatrix.get([0, 1]) : null; // 获取顶点 let vertices = adjMatrix.has([0, 1]) ? adjMatrix.get([0, 1]) : null; // 保存顶点 vertices.set([0, 1]); vertices.set([1, 0]); vertices.set([0, 0]); vertices.set([1, 1]); vertices.set([0, 1]); // 保存顶点 vertices.set([0, 1]); vertices.set([1, 0]); vertices.set([0, 0]); vertices.set([1, 1]); vertices.set([0, 1]);- 使用优先队列:
可以使用优先队列(数组或对象)来存储邻接矩阵,因为优先队列可以按照元素的添加顺序存储元素。
```javascript let adjMatrix = new Map(); // 添加边 adjMatrix.set([0, 1], 1); adjMatrix.set([1, 0], 0); adjMatrix.set([0, 0], 2); adjMatrix.set([1, 1], 1); adjMatrix.set([0, 1], 2); // 添加元素到优先队列 let queue = new Array(3); queue[0] = [0, 1]; queue[1] = [1, 0]; queue[2] = [0, 0]; queue[0].push([0, 1]); queue[1].push([1, 0]); queue[2].push([0, 0]); // 遍历优先队列 for (let i = 0; i < 3; i++) { let [v, e] = queue[i]; // 保存顶点 vertices.set(v); edges.set(e); } // 删除边 adjMatrix.delete([0, 1]); adjMatrix.delete([
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

