在C#中更改Stack的大小

时间:2012-03-31 07:23:56

标签: c# visual-studio-2008

我在C#项目A中编写了DFS(深度优先搜索)功能,运行正常。然后我构建了一个新的c#项目B,它有比A更多的代码行。当我在项目B中使用相同的输入数据运行相同的功能时,我的VS2008显示存在堆栈溢出错误。

我可以在C#中更改Stack的大小吗?

该功能的名称是:FindBlocksFounction()。

导致堆栈溢出的代码:

int tempx = nowx + dir[i, 0]; 
int tempy = nowy + dir[i, 1];
if (tempx < 0 || tempy < 0 || tempx >= m_Bitmap.Height || tempy >= m_Bitmap.Width)
    continue;
int next;
next = PointList.FindIndex(t =>
{
    if (t.x == tempx && t.y == tempy)
        return true;
    else
         return false;
 });//It seems like that FindIndex() in List<> costs some stack room.
if (next == -1)
    continue;

if (color[next] == 0)
{
    FindBlocksFounction(next);
}

1 个答案:

答案 0 :(得分:2)

我认为将深度优先搜索算法从递归转换为使用 Queue / Dequeue 集合的最佳方法。这不是一项复杂的任务。只是谷歌或看看这里:
Non recursive Depth first search algorithm

它可以防止代码因任何数据量而出现堆栈大小问题。