JavaScript 查找图中连接两点的所有路径算法
1、把图看成以起点为根节点的树
2、使用深度遍历算法遍历路径
3、遍历到节点为目标节点时,保存这条路径
find2PointsPath(sourceId, targetId) {
const { nodesKV } = this.chart.getStore(); // 节点集合
let pathArr = []; // 保存找到的所有路径 const findPath = (sourceId, targetId, pathNodes = []) => {
pathNodes = [...pathNodes]; // 存储当前路径的节点。拷贝一下,避免引用传递导致递归调用时相互影响。
pathNodes.push(sourceId);
// 找到终点,保存路径退出
if (sourceId === targetId) {
pathArr.push(pathNodes);
return;
} const node = nodesKV[sourceId];
// 取出相邻的节点
const neighborNodes = { ...gof(node, {})('childrenKV')(), ...gof(node, {})('parentsKV')() };
for (let id in neighborNodes) {
// 没在已探寻中的才递归探寻,避免图中的环导致循环探寻
if (!pathNodes.includes(id)) {
findPath(id, targetId, pathNodes);
}
}
};
findPath(sourceId, targetId); // 路径长度由短到长排序
pathArr.sort((path1, path2) => {
return path1.length - path2.length;
}); return pathArr;
}
JavaScript 查找图中连接两点的所有路径算法的更多相关文章
- javascript实现有向无环图中任意两点最短路径的dijistra算法
有向无环图 一个无环的有向图称做有向无环图(directed acycline praph).简称DAG 图.DAG 图是一类较有向树更一般的特殊有向图, dijistra算法 摘自 http://w ...
- Javascript 查找字符串中出现最多的字符和出现的次数
<script type="text/javascript"> //查找字符串中出现最多的字符和出现的次数 var str = 'Thatwheneying its o ...
- Floyd-Warshall求图中任意两点的最短路径
原创 除了DFS和BFS求图中最短路径的方法,算法Floyd-Warshall也可以求图中任意两点的最短路径. 从图中任取两点A.B,A到B的最短路径无非只有两种情况: 1:A直接到B这条路径即是最短 ...
- 图中长度为k的路径的计数
题意 给出一个有向图,其中每条边的边长都为1.求这个图中长度恰为 $k$ 的路劲的总数.($1 \leq n \leq 100, 1 \leq k\leq 10^9$) 分析 首先,$k=1$ 时答案 ...
- JavaScript查找数组中最大的值
// 查找一个数组中最大的数 // 定义一个方法 searchMax function searchMax(arr) { // 声明一个变量MaxNumber假设为数组中最大的值arr[0]; var ...
- poj2762 判断一个图中任意两点是否存在可达路径 也可看成DAG的最小覆盖点是否为1
Going from u to v or from v to u? Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 179 ...
- JavaScript查找字符串中给定字符出现的位置以及次数
要求: 给定字符串oabcoefoxyozzopp,要求输出字符o出现的位置和次数. 实现思路: 先查找第一个o出现的位置 然后只要判断indexOf返回的结果,若不是-1,则继续往后查找 因为ind ...
- 【矩阵乘法】图中长度为k的路径的计数
样例输入 4 2 0 1 1 0 0 0 1 0 0 0 0 1 1 0 0 0 样例输出 6 #include<cstdio> #include<vector> using ...
- JavaScript数据结构——图的实现
在计算机科学中,图是一种网络结构的抽象模型,它是一组由边连接的顶点组成.一个图G = (V, E)由以下元素组成: V:一组顶点 E:一组边,连接V中的顶点 下图表示了一个图的结构: 在介绍如何用Ja ...
随机推荐
- github同一账户+多个库
目标 我的情况是,既要向自己的public库提交代码,又要向别人的private库提交代码 网上搜到的情况一:github上有多个账号,都要向自己的库提交代码 网上搜到的情况二:多个git托管源(比如 ...
- 《浅析:java不支持多继承的原因》
很久以前,博主的一个好朋友给我考了我一个问题,为什么Java不支持多继承,如果多继承会有什么错误.这个问题困扰了我很久,我从单继承方面去推导过,又从多态的层面去思考过,但都无法解释为什么Java不支持 ...
- 域名排序 sort uniq awk
[root@web01 ~]# sort [-fbMnrtuk] [file or stdin] 选项与参数:-f :忽略大小写的差异,例如 A 与 a 视为编码相同:-b :忽略最前面的空格符部分: ...
- Apex辅助 - 透视|自瞄|无后
Apex辅助 - 透视|自瞄|无后 裙:㈥㈠肆㈥②ээ㈠5免费使用供大家参考裙:㈥㈠肆㈥②ээ㈠5免费使用供大家参考裙:㈥㈠肆㈥②ээ㈠5免费使用供大家参考裙:㈥㈠肆㈥②ээ㈠5免费使用供大家参考裙: ...
- 前端校验框架ValidForm之check方法修正
用过validform的朋友相信都知道,在利用check方法的时候,发现该方法对表单输入值只要符合datatype规则的就返回ture.那么我们想对某个字段进行ajax重复校验的时候,只需要在该表单元 ...
- Oracle数据库表的一些宏处理
比如现在,有个数据库表,我想要知道这个数据库已经建了多少张表?每个表有多少条数据?每个表都有哪些字段?以及字段的说明? 下面就用SQL一一解决上面的问题: --所有已存在的表名和说明 select t ...
- div上下切换(新增、删除、上下div切换)
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- Java 平时作业三
自定义一个可以存储 int 类型的集合类(例如:SequenceList),封装一维数组存储数据,该 集合类具有以下方法: (1)新增元素: (2)在指定位置插入一个元素: (3)按位置删除元素: ( ...
- 第九周学习笔记-ADO.Net中DataSet的应用
一.知识点描述 1.含义:DataSet是ADO.Net的断开式结构的核心组件,它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据.DataSet包含一个或多个DataTable ...
- Git通过密钥对远程仓库上传和更新详细操作
1,先到ssh中ls查看之前本地生成的公钥和私钥,然后将别人的密钥替换掉自己的密钥,这里我把别人的密钥放在d:/desktop/id_rsa 中,利用cp /D/Desktop/id_rsa id_ ...