Тема: C#
Показать сообщение отдельно
Старый 31.12.2011, 17:57   #81
Опытный игрок
 
Аватар для OverDoser
 
Регистрация: 08.09.2006
Адрес: столица России - Москва
Сообщений: 1,406
Репутация: 130 [+/-]
Тема:маркировка бинарного изображения(массива из 0 и 1)
Использовал рекурсивный алгоритм.Программа вылетает и ругается на переполнение стека. Помогите найти решение проблемы:
Скрытый текст:
Цитата:
class Search
{
//Метод получения координат соседних пикселей
public int[,] neighbors(int l, int p)
{
int[,] nset1 = new int[2, 8];//РУГАЕТСЯ НА ОШИБКУ ЗДЕСЬ
nset1[0, 0] = l - 1; nset1[0, 1] = l - 1; nset1[0, 2] = l - 1;
nset1[0, 3] = l; nset1[0, 4] = l; nset1[0, 5] = l + 1;
nset1[0, 6] = l + 1; nset1[0, 7] = l + 1;
nset1[1, 0] = p - 1; nset1[1, 1] = p; nset1[1, 2] = p + 1;
nset1[1, 3] = p - 1; nset1[1, 4] = p + 1;
nset1[1, 5] = p - 1; nset1[1, 6] = p; nset1[1, 7] = p + 1;
return nset1;
}
//Собственно, сам метод поиска связанных пикселей и присваивание им индекса kk.l и p-
//координаты первого пикселя, получившего индекс kk
public int[,] search(int[,] y, int kk, int l, int p)
{
y[l, p] = kk; Search ko = new Search();
int[,] nset = new int[2, 8];
//Координаты соседей
nset = ko.neighbors(l, p);
for (int qq = 0; qq < 8; qq++)

{ if (y[nset[0, qq], nset[1, qq]] == -1)
{//рекурсия
search(y, kk, nset[0, qq], nset[1, qq]); } }

return y;
}
/*Здесь идет получение самого массива из 0 и 1,
единицы меняем на -1, дабы избежать путаницы с индексом 1*/
int k=0;
for (int i=1;i<=300;i++)
for(int z=1;z<=300;z++)
{if (op[i,z]==-1){k++;op=dlo.search(op,k,i,z);}}]



Можно как-нибудь увеличить размер самого стека?Пишу в Visual Studio 2010

Последний раз редактировалось OverDoser; 31.12.2011 в 18:54.
OverDoser вне форума  
Отправить сообщение для OverDoser с помощью ICQ Ответить с цитированием