изменить размер стека в C # - PullRequest
0 голосов
/ 31 марта 2012

Я пишу основание DFS (поиск в глубину) в моем C # проекте A, и он работает нормально.Затем я создаю новый проект C # B, в котором больше строк кода, чем A. Когда я запускаю ту же основу в проекте B с теми же входными данными, мой VS2008 показывает, что есть ошибка переполнения стека.

Могу ли я изменить размер стека в C #?

Имя фонда: 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 Ответ

2 голосов
/ 31 марта 2012

Я думаю, что лучший способ конвертировать алгоритм поиска в глубину из рекурсии в использование очереди / очереди коллекции Это не сложная задача. Просто Google или посмотрите здесь:
Алгоритм поиска без рекурсивной глубины

Это предотвратит проблемы с размером стека для любого объема данных.

...