我想在100 X 100数组上执行DFS.(假设数组的元素代表图形 node )所以假设最坏的情况下,递归函数调用的深度可以高达10000,而每次调用最多需要20字节.那么这是可行的方法吗?是否存在堆栈溢出的可能性?

C/C++中堆栈的最大大小是多少?

请为这两个项目指定gcc

一般的限制是什么?

推荐答案

在VisualStudio中,我认为默认堆栈大小是1MB,因此在递归深度为10000的情况下,每个堆栈帧最多可以是~100字节,这对于DFS算法来说应该足够了.

大多数编译器(包括Visual Studio)都允许您指定堆栈大小.在一些(全部?)Linux认为堆栈大小不是可执行文件的一部分,而是操作系统中的一个环境变量.然后,您可以使用ulimit -s判断堆栈大小,并使用例如ulimit -s 16384将其设置为新值.

下面是gcc的默认堆栈大小link.

无递归的DFS:

std::stack<Node> dfs;
dfs.push(start);
do {
    Node top = dfs.top();
    if (top is what we are looking for) {
       break;
    }
    dfs.pop();
    for (outgoing nodes from top) {
        dfs.push(outgoing node);
    }
} while (!dfs.empty())

C++相关问答推荐

想了解 struct 指针和空指针转换

错误:在.h程序中重新定义 struct

sizeof结果是否依赖于字符串的声明?

*p[num]和(*p)num的区别

测量ARM MCU中断延迟的问题

C是否用0填充多维数组的其余部分?

如何在C中使printf不刷新标准输出?

Char变量如何在不使用方括号或花括号的情况下存储字符串,以及它如何迭代到下一个字符?

用C语言计算文本文件中的整数个数

C中的FREE函数正在触发断点

隐藏测试用例无法在c程序中计算位数.

*S=0;正在优化中.可能是GCC 13号虫?或者是一些不明确的行为?

Tcl_GetDoubleFromObj在列表的迭代中是一个缺点

将不同类型的指针传递给函数(C)

即使客户端不发送数据,也会发生UNIX套接字读取

函数指针作为函数参数 - 应该使用 const 吗?

macos/arm64 上地址空间不使用第一位吗?

使用 _Atomic float 时,MSVC 编译的代码会命中调试断言

如何为avr atmega32微控制器构建C代码,通过光电二极管捕获光强度并通过串行通信传输数据

C 中 struct 体自赋值是否安全?特别是如果一侧是指向 struct 的指针?