You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GeeksForGeeks递归DFS实现遇Segmentation Fault(SIGSEGV)求助

解决递归DFS导致的Segmentation Fault问题

递归实现的DFS在处理深度较大的图(比如链式结构的919个节点)时,会因为Python调用栈超出操作系统的栈大小限制而触发Segmentation Fault。即使提升Python的递归限制,也无法绕过操作系统层面的栈内存约束。

解决方法是改用迭代式DFS,用显式栈模拟递归过程,避免使用调用栈:

class Solution:
    #Function to return a list containing the DFS traversal of the graph.
    def dfsOfGraph(self, V, adj):
        visited = [False] * V
        dfs_order = []
        stack = [0]
        visited[0] = True
        
        while stack:
            node = stack.pop()
            dfs_order.append(node)
            
            # 反转邻接列表以保持和递归DFS相同的遍历顺序(可选,若测试用例不要求顺序可省略)
            for neighbor in reversed(adj[node]):
                if not visited[neighbor]:
                    visited[neighbor] = True
                    stack.append(neighbor)
        
        return dfs_order

关键改进点:

  • 使用显式栈(堆内存)替代Python调用栈,不受操作系统栈大小限制。
  • 用布尔数组visited替代集合,访问效率更高(O(1)索引操作),适合大规模顶点数量。
  • 反转邻接列表的遍历顺序是为了匹配递归DFS的节点处理顺序,若题目不要求特定遍历顺序,可去掉reversed()。

内容的提问来源于stack exchange,提问作者PumbaTimon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:59:52