Ребят помогите пожалуйста банально сделать правильную выборку. 1. Имеется матрица m на n элементов ну пусть будет 11 на 8. 2. Она забита целочисленными от 1 до 5 Что нужно: указываем на ячейку матрицы, и то число которое в этой ячейке и все числа с которыми оно граничит по столбцу или строке, равные ему, и для всех этих же чисел также граничащих, взять их и все эти ячейки забить нулями. Пример: т.е. указываем например на ячейку выделенным красным, то ее и все желты которые граничат друг с другом не по диагонали : то пишем в эти ячейки нули. Не могу домыслить как правильно эти ячейки выбрать без быдлокода. За плюсами не заржавею.
незнаю может нубское предложение но. 1)читаем содержание соседних ячеек(m+-1,n+-1) присваиваем, если там тоже число нули, и записываете куданить в массив их координаты. 2) пустить по записанным корам чтение, присвоение и запись как в пункте 1. остановить цикл когда количество записей а масиве координат перестанет увеличиватся.
Вообще можно замутить через двойные матрици. вернее сказать через маску, хроняющуюся в другйо мартице. Напряжный но просто в реализации способ. Алгоритм будет такой: 1) есть матрица вторая - она забита нулями. 2) указав координату, ты запоминаешь что там за цифра, затем во второй матрице ставишь на эту координату 1 3) обнуляешь счетчик изменения. пробегаешься по первой матрице по всем элементам и сравнимаешься по такому виду: Если число равно нужному числу и в во второй матрице хотябы у одного рядом стоящего элемента есть значение =1. Если да, то во второй матрице ставишь на текущей координате тоже 1. Если поставил 1, то увеличиваешь кол-во сделанных изменений 4) если было хоть одно изменение(по счетчику глянешь) то выполняешь опять третий пункт 5) как тока после пробега по матрице изменения больше не будет, то пробегаешься по второй матрице и на тех координатах где стоит 1 надо поставить в первой матрице 0. Всё просто и реализуется отсилы строк в 15 Можно вообще даже без второй матрици делать, достаточно просто первую сразу обнулять
Хотя можно замутить и более ускорено и без проверок на граници массива 1) имеется MAS - матрица допустим 8x8 X, Y - координата числа которое выбрано N - кол-во изменений 2) С - будет равно MAS[X, Y] т.е. запомнили число 3) MAS[x, y] = 0 - обнулили то место 4) N = 0; 5) пробегаемся по массиву по координатам i := 2 to 7 j := 2 to 7 6) если текущая точка равна нулю, то если mas[i , j -1] = C то обнуляем mas[i , j - 1] и N увеличивам И так для mas[i , j +1] mas[i - 1, j] и mas[i + 1, j] 7) если тукущая точка равна C, то проверям mas[i , j - 1] mas[i , j +1] mas[i - 1, j] и mas[i + 1, j] и если хоть гдето есть ноль, то обнуляем текущую точку. и N увеличивам 8) если N неравно нулю то переходим к 4 пункту. В итоге всё само вычислится буквально за пару итераций
для матрицы 10*10 потребовалось у меня 2-3 итераций Код примерно так выглядит Code: repeat n := 0; for y := 2 to 9 do begin for x := 2 to 9 do begin if mas[x, y] = 0 then begin if mas[x, y - 1] = c then begin mas[x, y - 1] := 0; inc(n); end; if mas[x, y + 1] = c then begin mas[x, y + 1] := 0; inc(n); end; if mas[x - 1, y] = c then begin mas[x - 1, y] := 0; inc(n); end; if mas[x + 1, y] = c then begin mas[x + 1, y] := 0; inc(n); end; end else if mas[x, y] = c then begin if (mas[x - 1, y] = 0) or (mas[x + 1, y] = 0) or (mas[x, y - 1] = 0) or (mas[x, y + 1] = 0) then begin mas[x, y] := 0; inc(n); end; end; end; end; until n = 0;