给定源顶点,查找有向图中具有环路的所有路径

2024-04-10

我无法解决这个问题。我必须找到所有simple从源顶点开始的路径s含有一个simple有向图中的循环。即不允许重复,当然除了循环在路径上连接回的单个重复顶点。

我知道如何使用 DFS 访问来查找图形是否有循环,但我找不到一种方法来使用它来查找从s.

例如,在此图中

        +->B-+
        |    v
s-->T-->A<---C
        |    ^
        +->D-+

从...开始s,将正确找到路径 S-T-A-B-C-A。但是路径S-T-A-D-C-A将不会被找到,因为顶点C被标记为DFS已访问。

有人可以提示我如何解决这个问题吗? 谢谢


这实际上是一个非常简单的算法,比DFS简单。你只需列举一下all朴素递归搜索中的路径,记住在路径自身循环时不要进一步递归:

(这只是一个受 Python 启发的伪代码。我希望它足够清楚。)

 def find_paths_with_cycles(path_so_far):
       node_just_added = path_so_far.back()
       for neigh in out_neighbours(node_just_added):
           if neigh in path_so_far:
               # this is a cycle, just print it
               print path_so_far + [neigh]
           else:
               find_paths_with_cycles(path_so_far + [neigh])


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

给定源顶点,查找有向图中具有环路的所有路径 的相关文章

  • 寻找距离原点最近的 100 颗恒星的算法

    首先让我提出正确的问题 问 有一个文件包含超过一百万个点 x y 每个点代表一颗星星 a b 处有一颗行星地球 现在 任务是构建一种算法 返回距离地球最近的 100 颗恒星 您的算法的时间和空间复杂度是多少 这个问题在各种采访中被问过很多次
  • 固定大小集以包含给定集的最大数量

    我有大约 1000 组尺寸 1 4 1 3 3 5 6 4 5 6 7 5 25 42 67 100 是否有可能找到包含最大数量的给定集合的大小为 20 的集合 检查每一个100 80 20 集 效率低下 我不太确定这是 NP 完全的 考虑
  • 最慢的计算复杂度(Big-O)

    在这些算法中 我知道 Alg1 是最快的 因为它是 n 平方的 接下来是 Alg4 因为它是 n 的立方 然后 Alg2 可能是最慢的 因为它是 2 n 这应该具有非常差的性能 然而Alg3和Alg5在我的阅读速度方面还没有遇到过 这两种算
  • 寻找将集合映射到整数的双射函数

    对于任意两个序列 a b 其中 a a1 a2 an 且 b b1 b2 bn 0a b具有相同的元素 而不关心它们的顺序 例如 如果 a 1 1 2 3 b 2 1 3 1 c 3 2 1 3 则 f a f b f a f b 我知道有
  • 数组中连续元素的最大乘积

    我在现场面试的时候被问到了这个算法问题 由于没有要求我签署保密协议 我将其发布在这里寻求答案 给定一个数组REAL不包含 0 的数字 找到产生最大乘积的连续元素 该算法应在线性时间内运行 我考虑过以下方法 使用两个数组 第一个是利用DP思想
  • 分而治之策略来确定列表中是否有超过 1/3 的相同元素

    我正在使用分治算法来确定列表中是否有超过 1 3 的元素相同 例如 1 2 3 4 不 所有元素都是唯一的 1 1 2 4 5 是的 其中 2 个是相同的 没有排序 是否有分而治之的策略 我陷入了如何划分的困境 def is valid i
  • 以任意顺序匹配可选捕获组

    在解析用户输入的许多情况下 用户有机会向输入添加几个可选标志 这些标志应该以任何顺序接受 如何使用正则表达式对其进行解析 以便每个标志都位于它自己的捕获组中 如果存在 例如 有一个必需的令牌a 然后是 3 个可选标记 可以按任何顺序出现b
  • 用 C++ 生成 AST

    我正在用 C 制作一个解释器 到目前为止我已经有了词法分析器来生成标记 问题是我不确定如何生成 行走 解析树 我正在考虑使用数组数组来制作解析树 但我不确定如何以正确的顺序将标记实际插入到解析树中 我不确定是自上而下 左右还是自下而上 左右
  • Silverlight 中的图形可视化

    我有一个表示有向图的数据结构 我正在寻找一个好的 Silverlight 可视化 以允许我从一个节点导航到另一个节点 最好带有一些漂亮的动画 有谁知道这种显示有什么好的 UI 控件或框架吗 甚至是来自另一个领域的样本 也许是社交网络 我的图
  • 计算两点之间的最短路线

    过去几周我一直在开发一款多人 HTML5 游戏 使用nodejs and websockets 我已经被这个问题困扰了一段时间 想象一下 我用数组实现了这个平铺地图 如下所示 1 or 棕色瓷砖 路上有障碍物 玩家无法通过 0 or 绿色瓷
  • 过程式编程与 OOP 的开发成本?

    我有相当深厚的 OO 背景 OOD 和 OOP 的好处对我来说是第二天性 但最近我发现自己在一家与过程编程习惯相关的开发商店 实现语言具有一些 OOP 功能 但它们没有以最佳方式使用 更新 每个人似乎对这个话题都有自己的看法 我也是如此 但
  • shell脚本中关联数组的时间复杂度

    我想知道在 shell 脚本中使用关联数组时如何构造 实现 另外 我想知道基于 shell 脚本的关联数组的时间复杂度是否是最佳的 因为我们可以使用字母和数字作为它们各自的键 编辑 他们使用什么哈希函数 如果您使用关联数组 则不能通过 使用
  • 子序列和

    给定一个整数数组 例如 1 2 3 1 查找是否存在总和为0并返回它 例如 1 2 3 or 2 3 1 检查每个子序列是O n 2 这效率太低了 有改进的想法吗 创建一个新数组 其中每个元素等于前一个元素加上该元素的总和 Input 1
  • 迭代任意大小的子集

    我可以迭代大小为 1 的子集 for int a 0 a lt size a 或大小为 2 的子集 for int a1 0 a1 lt size a1 for int a2 a1 1 a2 lt size a2 or 3 for int
  • 负整数的基数排序

    我正在尝试对整数 包括负整数 实现基数排序 对于非负整数 我计划为数字0 9创建一个10个队列的队列 并实现LSD算法 但我对负整数有点困惑 我现在的想法是继续为它们创建另一个包含 10 个队列的队列 并分别对它们进行排序 然后在最后 我将
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 数据聚合和缓存:如何按时间间隔快速绘制大型时间序列数据集的图表

    我有一个巨大的时间序列数据集 我想绘制图表 时间序列可以追溯到 5 年前 从后端的角度来看 以各种分辨率 间隔 显示这些数据的常用方法是什么 本质上我想绘制这样的数据图表 https bitcoinwisdom com markets bi
  • 用于开始和/或包含搜索的最快字符串集合结构/算法是什么

    我有以下情况 我有一个大的字符串集合 比如说 250 000 平均长度可能是 30 我要做的就是在这些搜索中进行许多搜索 大多数搜索都是 StartsWith 和 Contains 类型的 该集合在运行时是静态的 这意味着选择的集合的初始读
  • 以 O(1) 计算汉明权重 [重复]

    这个问题在这里已经有答案了 在二进制表示中 汉明权重是 1 的数量 我偶然发现了网络并找到了一个 O 1 的答案 v v v gt gt 1 0x55555555 v v 0x33333333 v gt gt 2 0x33333333 in
  • 二维滑动窗口最小值/最大值

    假设我们得到一个大小为 NxN 的像素整数矩阵和一个整数 k 窗口大小 我们需要使用滑动窗口找到矩阵中的所有局部最大值 或最小值 这意味着 如果某个像素与其周围窗口中的所有像素相比具有最小 最大 值 则应将其标记为最小 最大 有一种著名的滑

随机推荐

  • 跨越父按钮高度的 100%

    我有以下标记
  • MVC 3 DevExpress - 返回到控制器的模型为空

    问题确实很简单 但我似乎无法解决 我正在将 Razor 引擎与 DevExpress 组合框一起使用 我有这个代码 MODEL public class TestModel public string Name get set public
  • Postgresql:如果列以减号结尾,则删除文本字段中的最后一个字符

    我想删除列中的最后一个字符 如果它以减号结尾 我怎样才能在 postgresql 中做到这一点 例如 sdfs dfg4t etze45z5z gt sdfs dfg4t etze45z5z gsdhfhsfh rgertggh gt st
  • 获取数据包中的所有层

    如何获取 scapy 中所有图层的列表 例如 Ether IP UDP DNS or Ether IP TCP HTTP 我唯一能想到的就是做一个packet summary 并解析输出 这看起来很粗糙 我认为应该有一个内置的方法 但在文档
  • 静态库在 iOS 模拟器上出现错误并在 iOS 设备上运行

    目前我正在开发一个iOS应用程序 iOS 6 我需要在其中实现一个静态库 我使用这个成功实现了静态库tutorial http www icodeblog com 2011 04 07 creating static libraries f
  • 使用 espresso 的 testUI (Jenkins)

    该应用程序正在本地通过 espresso 测试 我的意思是直接到设备和 genymotion 模拟器 当我使用 Jenkins 构建应用程序的映像时 浓缩咖啡测试未成功 我收到此错误 JENKINS java lang RuntimeExc
  • 仅颤动具有左上角和右上角边框的顶部边框

    我只需要向小部件 最好是容器 卡片 添加具有左上 右上边框半径的顶部边框阴影 我不需要左 右 下边框 请看下图 我尝试使用如下容器 Container child buildRemaining context decoration BoxD
  • Postman 中的“传输开始”是什么意思?

    我试图弄清楚为什么 API 需要很长时间才能处理我的请求 并在 Postman 中发现了这一点 传输开始是什么意思 https community postman com t how to interpret time details in
  • 如何在jquery-mobile/phonegap的$(document).ready()/onDeviceReady()上加载脚本[重复]

    这个问题在这里已经有答案了 我正在使用 PhoneGap 和 jQuery Mobile 开发一个应用程序 现在 当页面加载时 我想加载一个script js file 基本上onDeviceReady or document ready
  • android studio 2.2如何在没有android-apt插件的情况下应用dagger2

    我的项目 build gradle buildscript repositories jcenter dependencies classpath com android tools build gradle 2 2 0 alpha3 cl
  • 对(可能的)Android 内存泄漏一无所知

    我一直面临着一些烦人的事情OutOfMemoryErrors 即使在确保我的所有位图都正确缩放等之后 事实上 这个问题似乎与位图根本无关 但我可能是错的 出于测试和错误隔离的目的 我一直使用导航抽屉 不使用后退按钮 在两个活动 让我们称之为
  • 如何在 React 中将 select 元素与 prop 双向绑定

    在反应中创建选择元素的批准方法是什么 它与包含组件的选择的道具有两种方式绑定 默认选择应该是 prop 的当前属性 可以生成 因为该值是任意的 并且在选择时 prop 属性应该反映选择 此外 应该可以将值直接写入选择字段 我将选项添加到状态
  • 如何检测正在运行的 MSI 安装 [重复]

    这个问题在这里已经有答案了 我正在寻找一种方法来检测 Windows Installer 安装是否已在进行中 到目前为止我发现的是 检查注册表项 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows C
  • 通配符证书对 mydomain.com 无效

    我创建了通配符证书来支持我的网站域和子域 新证书适用于我的子域 例如 www mydomain com sub mydomain com 但是当我尝试访问 mydomain com 时 我收到证书警告 该证书仅对 mydomain com
  • 葡萄酒规格文件

    我有一个名为的 Windows DLLmorag dll包含函数 foo 和 bar 我还有一个名为的 Linux SOmorag so包含 foo 和 bar 的 Linux 实现 每个平台上的参数相同 我有一个可以加载的 Windows
  • 来自子进程的大数据块的 pexpect 超时

    我正在使用 pexpect 调用另一个提示输入 raw input 的 python 脚本 py27 我试图围绕这个脚本构建一个 GUI 包装器而不修改它 我遇到的问题是 我调用的脚本在下一个命令提示符之前执行时返回了大量数据 例如 10K
  • 如何在集成测试中使用 Propagation.REQUIRES_NEW 回滚嵌套事务

    我对扩展以下基类的各种服务进行了几个集成测试 ContextConfiguration locations classpath applicationContext test xml TransactionConfiguration tra
  • 在 Firebase 中对数据进行排序

    我正在使用 Firebase listview 如下所示 它的工作方式就像一个魅力 但问题是它在我的 listview lv 末尾显示子项 Posts 中最后按下的键 我希望最后按下的键最重要的是显示 或者我是否可以按日期对其进行排序 qu
  • MS Access SQL,更改数据类型

    当尝试在 Access 的设计模式下将数据类型从文本更改为数字 使用接近 2 GB 的数据库 时 我不断收到 磁盘空间或内存不足 错误 因此我找到了一种解决方法 基本上创建一个新列 将数据类型设置为数字 复制旧列内容 删除旧列并将新列重命名
  • 给定源顶点,查找有向图中具有环路的所有路径

    我无法解决这个问题 我必须找到所有simple从源顶点开始的路径s含有一个simple有向图中的循环 即不允许重复 当然除了循环在路径上连接回的单个重复顶点 我知道如何使用 DFS 访问来查找图形是否有循环 但我找不到一种方法来使用它来查找