|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.02.2015, 19:00 | #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 Помогите, пож! |
07.02.2015, 19:45 | #2 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 472
|
Судя по условию - задача проверяется ejudge. Ты для себя участвуешь в онлайн-псевдоолимпиадах?
Тут решение ищется вариацией поиска в ширину (BSF) - почти волновым методом (алгоритм Ли). Лишь условия остановки слегка изменяются. В отличие от алгоритма Ли (из-за отсутствия препятствий) можно не хранить список ячеек фронта волны, а вычислять их. Ознакомиться с алгоритмом Ли можно на Wikipedia и algolist. Пробуй. Или ты очень занят, а решать кому-то нужно? Я тоже занят - к нам в город приехал цирк Дю Солей, мы только это и обсуждаем с детьми. |
07.02.2015, 20:19 | #3 | |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
Я тож за BFS.
Цитата:
Если не хранить волну, то получим N^4.. А это точно не зайдет И да, я бы начал так : Пробежался бы по массиву, ставля перманентные 0 А дальше уже bfs |
|
07.02.2015, 20:56 | #4 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 472
|
А как уменьшить? Ведь, по существу, рассматриваются сочетания всех ячеек со всеми.
А не хранить фронт волны - просто отказ от двух массивов с перечнем ячеек текущей волны и с перечнем ячеек волны следующего шага. Т.к. можно получить аналитический вид 4 циклов for (ну добавив проверки на границы матрицы). ----- Подумал ещё. Да, лучше хранить. Тогда при "неперспективности" направления будет уменьшаться длина волны=время выполнения. |
07.02.2015, 21:02 | #5 |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
Да не.. Ну на кой нам два массива.. Бахнем одну очередь. Будем крутить пока она не пуста, занимая соседние клетки
|
07.02.2015, 21:31 | #6 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 472
|
Нет да пруф.
Хотя рядом с одним массивом. Но я его не понял - значит его не существует. Нет нет нет. Он, кажется, совсем без массива с волной. Там, что-то другое. --------------- Ссылкозакидательство вместо аргументов. |
07.02.2015, 21:53 | #7 | |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
Цитата:
|
|
07.02.2015, 22:21 | #8 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 472
|
Да, точно. Вариант С с очередью - эквивалентом объединения двух массивов (текущий фронт и будущий), но ускоренный из-за отсутствия копирования одного в другой.
Ну для нас всё уже ясно. Осталось уговорить кого-нибудь начать реализацию. |
07.02.2015, 23:00 | #9 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Возле каждого нуля делать цикл по концентрическими квадратам под углом 45 градусов с учетом границы матрицы пока не найдется 1 или больше не нулевых в квадрате. В этом квадрате расстояние одинаковое до центра. Все. А то придумали, алгоритм Ли Массив один, забитые нули заполнить отрицательными что бы не путаться, выводить Abs
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
07.02.2015, 23:30 | #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 |