Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
27 / 27 / 29
Регистрация: 04.01.2015
Сообщений: 120

Заменить каждый нулевой элемент матрицы ближайшим ненулевым

06.02.2015, 21:26. Показов 6037. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте. Вот попалась такая задачка:

Дана матрица A размером NxN, заполненная неотрицательными целыми числами. Расстояние между двумя элементами Ai j и Ap q определено как |i - p| + |j - q|.

Требуется заменить каждый нулевой элемент матрицы ближайшим ненулевым. Если есть две или больше ближайших ненулевых ячейки, нуль должен быть оставлен.

Ограничения: 1 <= N <= 200, 0 <= Ai j <= 1 000 000.

Входные данные
В первой строке содержится число N. Затем идут N строк по N чисел, разделённых пробелами и представляющих собой матрицу.

Выходные данные
Выводится N строк по N чисел, разделённых пробелами, - модифицированная матрица.

Помогите решить, пожалуйста! Заранее благодарен всем, кто откликнется.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.02.2015, 21:26
Ответы с готовыми решениями:

Требуется заменить каждый нулевой элемент матрицы ближайшим ненулевым
есть такая задача Ближайшее число (Время: 1 сек. Память: 16 Мб Сложность: 46%) Дана матрица A размером NxN, заполненная...

Каждый нулевой элемент матрицы заменить на максимальное значение строки, в которой находится данный элемент.
Дана действительная квадратная матрица порядка n (n&lt;10). Каждый нулевой элемент матрицы заменить на максимальное значение строки, в которой...

Заменить каждый нулевой элемент матрицы суммой смежных ему элементов
В прямоугольной матрице часть элементов имеют нулевое значение. Заменить каждый нулевой элемент суммой смежных ему элементов (по...

1
205 / 142 / 57
Регистрация: 25.12.2014
Сообщений: 447
07.02.2015, 11:26
Лучший ответ Сообщение было отмечено isst как решение

Решение

Несколько идей.
1)Чтобы замена нуля на ближайший ненулевой не влияла на остальные нули, нужно записывать вместо него не значение ближайшего, а значение ближайшего со знаком минус. Соответственно, для каждого нуля искать ближайшие положительные элементы. При выводе выдавать абсолютную величину элементов.
2)Если на клетчатой бумаге поставить в центре ноль, а вокруг него в клетках поставить расстояние до этого нуля, то увидим, что одинаковые числа образуют квадраты, наклоненные под 45о к горизонтали. Эти квадраты являются "концентрическими окружностями" в данной метрике.
Можно вывести, что квадрат, соответствующий расстоянию d ("окружность с радиусом d") занимает количество ячеек (периметр или "длина окружности"): L=4d.
Квадрат состоит их 4-х сторон, движение по каждой стороне задается одним из 4-х векторов: https://www.cyberforum.ru/cgi-bin/latex.cgi?(\pm1,\pm1). Если двигаться в цикле, по всем k ячейкам квадрата от 0 до L-1, то смещение вектора для перехода к очередной ячейке можно задать, например,как
Pascal
1
2
3
 s:= k div d; {номер стороны 0-3}
if (s=0)or(s=3) then dj:=1 else dj=-1;
if s < 2 then di:=1 else di=-1;
Движение начинаем от верхнего угла квадрата.
3)Поэтому общий алгоритм такой:
цикл по всей матрице. Если нашли нулевой, то для него перебираем все окружающие квадраты (все расстояния от 1 до ... скольки-то), пока не нашли положительный (положительные) или не вышли за пределы матрицы.
Для перебора принимаем расстояние d=1, обрабатываем квадрат с этим "радиусом", а потом увеличиваем d, если не нашли положительный.
Если при обработке квадрата нашли ровно 1 положительный, то его и записываем в нулевой со знаком минус. Если нашли два, то ноль оставляем.
Если все элементы квадрата за пределами матрицы, то обработка этого нулевого закончена, потому что и последующие будут вне матрицы. Но это возможно только для полностью нулевой входной матрицы, что можно проконтролировать сразу на входе. Если в матрице есть хоть 1 положительный элемент, то он найдется на каком-то расстоянии.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.02.2015, 11:26
Помогаю со студенческими работами здесь

В прямоугольной матрице каждый нулевой элемент заменить средним арифметическим значением
Помогите решить:cry: В прямоугольной матрице каждый нулевой элемент заменить средним арифметиче-ским значением ненулевых элементов той...

Квадратная матрица. Каждый нулевой элемент заменить на максимальное значение строки
Дана действительная квадратная матрица порядка n (n &lt;10). Каждый нулевой элемент матрицы заменить на максимальное значение строки, в...

Заменить в массиве каждый нулевой элемент полусуммой последующего и предыдущего
Составить программу с использованием базовых алгоритмов для работы с одномерными массивами Ввести с клавиатуры одномерный массив,...

Заменить каждый нулевой элемент матрицы суммой смежных ему элементов
В прямоугольной матрицы часть элементов имеют нулевое значение. Заменить каждый нулевой элемент суммой смежных ему элементов (по...

Задача Таблица. За одно обращение к каждому элементу массива необходимо каждый элемент заменить ближайшим большим следующим за ним
Не могу решить задачу( В массиве А размера n за одно обращение к каждому элементу массива необходимо каждый элемент заменить ближайшим ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru