![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 02.01.2015
Сообщений: 85
|
![]()
Всем доброго времени суток:
Дана матрица A размером NxN, заполненная неотрицательными целыми числами. Расстояние между двумя элементами Ai j и Ap q определено как |i - p| + |j - q|. Требуется заменить каждый нулевой элемент матрицы ближайшим ненулевым. Если есть две или больше ближайших ненулевых ячейки, нуль должен быть оставлен. Ограничения: 1 <= N <= 200, 0 <= Ai j <= 1 000 000. Входные данные В первой строке содержится число N. Затем идут N строк по N чисел, разделённых пробелами и представляющих собой матрицу. Выходные данные Выводится N строк по N чисел, разделённых пробелами, - модифицированная матрица. Примеры: входные данные 3 5 0 0 0 0 0 0 0 6 выходные данные 5 5 0 5 0 6 0 6 6 Помогите, пож! ![]() |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 474
|
![]()
Судя по условию - задача проверяется ejudge. Ты для себя участвуешь в онлайн-псевдоолимпиадах?
Тут решение ищется вариацией поиска в ширину (BSF) - почти волновым методом (алгоритм Ли). Лишь условия остановки слегка изменяются. В отличие от алгоритма Ли (из-за отсутствия препятствий) можно не хранить список ячеек фронта волны, а вычислять их. Ознакомиться с алгоритмом Ли можно на Wikipedia и algolist. Пробуй. Или ты очень занят, а решать кому-то нужно? Я тоже занят - к нам в город приехал цирк Дю Солей, мы только это и обсуждаем с детьми. |
![]() |
![]() |
![]() |
#3 | |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
![]()
Я тож за BFS.
Цитата:
Если не хранить волну, то получим N^4.. А это точно не зайдет И да, я бы начал так : Пробежался бы по массиву, ставля перманентные 0 А дальше уже bfs |
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 474
|
![]()
А как уменьшить? Ведь, по существу, рассматриваются сочетания всех ячеек со всеми.
А не хранить фронт волны - просто отказ от двух массивов с перечнем ячеек текущей волны и с перечнем ячеек волны следующего шага. Т.к. можно получить аналитический вид 4 циклов for (ну добавив проверки на границы матрицы). ----- Подумал ещё. Да, лучше хранить. Тогда при "неперспективности" направления будет уменьшаться длина волны=время выполнения. |
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
![]()
Да не.. Ну на кой нам два массива.. Бахнем одну очередь. Будем крутить пока она не пуста, занимая соседние клетки
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 474
|
![]()
Нет да
![]() Хотя рядом с одним массивом. Но я его не понял - значит его не существует. Нет нет нет. Он, кажется, совсем без массива с волной. Там, что-то другое. --------------- Ссылкозакидательство вместо аргументов. |
![]() |
![]() |
![]() |
#7 | |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 474
|
![]()
Да, точно. Вариант С с очередью - эквивалентом объединения двух массивов (текущий фронт и будущий), но ускоренный из-за отсутствия копирования одного в другой.
Ну для нас всё уже ясно. Осталось уговорить кого-нибудь начать ![]() |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Возле каждого нуля делать цикл по концентрическими квадратам под углом 45 градусов с учетом границы матрицы пока не найдется 1 или больше не нулевых в квадрате. В этом квадрате расстояние одинаковое до центра. Все. А то придумали, алгоритм Ли
![]()
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#10 |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
![]()
Вот..
Пока так.. Косяк на 8 тесте.. Проверял тут Код:
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Найти ближайшее к какому - нибудь целому | Asya7 | Паскаль, Turbo Pascal, PascalABC.NET | 8 | 15.01.2015 02:00 |
Prolog.Ближайшее значение в списке | Lisёноk | Помощь студентам | 2 | 28.11.2013 16:36 |
Ближайшее и наименьшее к n из двух чисел | turtles | Общие вопросы по Java, Java SE, Kotlin | 2 | 25.08.2011 16:19 |
Натуральное число n. Матрица | lexx007 | Помощь студентам | 1 | 20.12.2008 22:35 |