我在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);
}
答案 0 :(得分:2)
我认为将深度优先搜索算法从递归转换为使用 Queue / Dequeue 集合的最佳方法。这不是一项复杂的任务。只是谷歌或看看这里:
Non recursive Depth first search algorithm
它可以防止代码因任何数据量而出现堆栈大小问题。