如何在 BFS 图形搜索 JavaScript 中跟踪路径

2024-02-14

我正在研究 BFS 算法,但我很难弄清楚如何跟踪最短路径。
下面是我使用过的代码:

const graph = {
  1: [2, 3, 4],
  2: [5, 6],
  3: [10],
  4: [7, 8],
  5: [9, 10],
  7: [11, 12],
  11: [13],
};

function bfs(graph, start, end) {
  let queue = [...graph[start]];
  let path = [start];
  let searched = [];
  while (queue.length > 0) {
    let curVert = queue.shift();
    if (curVert === end) {
      return path;
    } else if (searched.indexOf(curVert) === -1 && graph[curVert]) {
      queue = [...queue, ...graph[curVert]];
      searched.push(curVert);
      path.push(curVert);
    }
  }
}

console.log(bfs(graph, 1, 13));

我希望函数调用得到的回报是最短路径。在这种情况下[1, 4, 7, 11, 13].


您还需要存储每个访问节点的路径。

const graph = { 1: [2, 3, 4], 2: [5, 6], 3: [10], 4: [7, 8], 5: [9, 10], 7: [11, 12], 11: [13] };

function bfs(graph, start, end) {
    let queue = [[start, []]],
        seen = new Set;

    while (queue.length) {
        let [curVert, [...path]] = queue.shift();
        path.push(curVert);
        if (curVert === end) return path;

        if (!seen.has(curVert) && graph[curVert]) {
            queue.push(...graph[curVert].map(v => [v, path]));
        }
        seen.add(curVert);
    }
}

console.log(bfs(graph, 1, 13));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 BFS 图形搜索 JavaScript 中跟踪路径 的相关文章

随机推荐

  • 如何在 Java 中对计算密集型代码段进行多线程处理?

    我有一个java程序 其中一部分是计算密集型的 就像这样 for i 1 512 COMPUTE INTENSIVE SECTION end 我想将其拆分为多线程 使其运行时更快 计算密集部分不是按顺序进行的 这意味着先运行 i 1 或先运
  • 此类对于键 setOutput 不符合键值编码[重复]

    这个问题在这里已经有答案了 我是 iOS Objective C 的新手 我正在努力学习 我正在阅读 Sam 的 自学 iOS 我正在做一个名为 Hello Noun 的项目 它不显示 Hello World 而是接受输入并显示 Hello
  • javax.crypto.BadPaddingException:解密时给定最终块未正确填充错误

    我正在按如下方式对数据进行加密和解密 但出现错误 protected Cipher aes Gen with Key byte key Cipher cipher null try byte key hash key toString ge
  • 按某些列值过滤矩阵

    考虑我有这个矩阵 02 04 06 08 10 2 07 14 21 28 35 2 11 22 33 44 55 0 15 14 21 28 35 2 我想要相同的矩阵 但只有最后一行column 2 所以我想要这个矩阵 02 04 06
  • php adodb MSSQL 连接

    我有一个 Linux 服务器 我正在尝试使用 php adodb 连接到 MSSQL 服务器 include adodb5 adodb inc php conn ADONewConnection odbc mssql dsn Driver
  • 在 Coffeescript 中连接数组的数组

    我试图在 Coffeescript 中找到一种优雅的方式来合并数组数组 以便 1 2 3 4 5 6 7 8 9 gt 1 2 3 4 5 6 7 8 9 正如您可能想象的那样 我需要这个 因为我正在从 for in 构造中的函数生成数组
  • 检查一对值是否在二维数组内 python

    给定一个数组arr定义如下 arr np arange 4 reshape 2 2 我想检查一对值 0 1 是否在我的数组内 我尝试了 np isin 但它将一对值视为两个单独的值 有人知道解决这个问题的方法吗 不确定以前写的是什么OP想要
  • 为什么 EF Core 2.2.6 不进行垃圾收集?

    我正在使用 dotMemoryUnit 来证明我的 DbContext 对象正在正确收集垃圾 我觉得这段代码在单元测试中应该可以正常工作 但测试总是失败 我唯一能猜测的是 EF Core 在某处保存了引用 编辑 我不确定建议的questio
  • crypto#randomBytes 的随机性如何?

    随机性有多大crypto randomBytes 20 toString hex 就这么简单 我需要知道的一切 随机性有多大crypto randomBytes 通常 足够随机 适合您需要的任何目的 crypto randomBytes h
  • 如何通过另一个 id 列表对 java 中的列表进行排序

    我有一个java对象列表 看起来像这样 List
  • 使用 ggplot 固定填充密度图的不同部分

    给定抽取自rnorm 和截止c我希望我的绘图使用以下颜色 红色表示左侧的部分 c 蓝色代表中间部分 c and c 绿色代表右侧的部分c 例如 如果我的数据是 set seed 9782 mydata lt rnorm 1000 0 2 c
  • 使用 Word.Interop 创建嵌套字段

    目前 我正在使用 VSTO 更准确地说是使用 C 和 Microsoft Word 应用程序插件 我确实想以编程方式创建嵌套字段 我提出了以下源代码 用于测试目的 public partial class ThisAddIn private
  • 类型错误:在导航状态中找不到“路线”

    我在用createMaterialTopTabNavigator来自反应导航 其中我有两个单独的屏幕UpdatesStack and ShopsStack我想从这些屏幕导航到其他屏幕 所以我写的是
  • 当状态发生变化时如何运行操作?

    enum SectionType String CaseIterable case top Top case best Best struct ContentView View State private var selection Int
  • 如何进行良好的性能对比测试?

    要编写一个好的比较测试 您必须运行它数千 数百万 次 它将 在大多数情况下 平衡其他计划的影响力 但如果 JVM 可以影响结果 例如 第一个解决方案是 final StringBuilder stringBuilder new String
  • Java 8 流与集合存储

    我一直在阅读 Java 8 Streams 以及从数据源流式传输数据的方式 而不是从整个集合中提取数据 我特别读到了这句话一篇文章 http www drdobbs com jvm lambdas and streams in java 8
  • 从 RemoteViews 调用 setImageDrawable

    我已经在活动中完成了此操作 效果非常好 ImageView myImage ImageView findViewById R id myImageView ShapeDrawable mDrawable mDrawable new Shap
  • Dynamics CRM - 呼叫者未通过服务身份验证

    我在 Web 服务器 A 上有一个 MVC4 Web 应用程序 它使用位于 Web 服务器 B 上的 OrganizationServiceProxy 来使用 Dynamics CRM Web 服务 MVC4 应用程序是在启用 ASP NE
  • SBT 如何在插件任务执行中使用 Build.sbt 中的类

    中定义的任何类project scala文件可供 SBT 在构建定义代码中使用 我希望这些类在 SBT 插件任务执行期间可用 但它们似乎不可用 为什么会这样 我该如何解决它 我试图解决的具体问题是添加自定义规则Scalastyle 该项目目
  • 如何在 BFS 图形搜索 JavaScript 中跟踪路径

    我正在研究 BFS 算法 但我很难弄清楚如何跟踪最短路径 下面是我使用过的代码 const graph 1 2 3 4 2 5 6 3 10 4 7 8 5 9 10 7 11 12 11 13 function bfs graph sta