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
相关产品推荐
相关产品推荐

