|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.03.2019, 20:22 | #1 |
Новичок
Джуниор
Регистрация: 19.03.2019
Сообщений: 3
|
Pascal ABC.NET какое минимальное количество водостоков нужно построить, чтобы после дождя вся вода утекала в водостоки
Карту местности условно разбили на квадраты, и посчитали среднюю высоту над уровнем моря для каждого квадрата.
Когда идет дождь, вода равномерно выпадает на все квадраты. Если один из четырех соседних с данным квадратом квадратов имеет меньшую высоту над уровнем моря, то вода с текущего квадрата стекает туда (и, если есть возможность, то дальше), если же все соседние квадраты имеют большую высоту, то вода скапливается в этом квадрате. Разрешается в некоторых квадратах построить водостоки. Когда на каком-то квадрате строят водосток, то вся вода, которая раньше скапливалась в этом квадрате, будет утекать в водосток. Если есть группа квадратов, имеющих одинаковую высоту и образующих связную область, то если хотя бы рядом с одним из этих квадратов есть квадрат, имеющий меньшую высоту, то вся вода утекает туда, если же такого квадрата нет, то вода стоит во всех этих квадратах. При этом достаточно построить водосток в любом из этих квадратов, и вся вода с них будет утекать в этот водосток. Требуется определить, какое минимальное количество водостоков нужно построить, чтобы после дождя вся вода утекала в водостоки. Входные данные Во входном файле INPUT.TXT записаны сначала числа N и M, задающие размеры карты — натуральные числа, не превышающие 100. Далее, идет N строк, по M чисел в каждой, задающих высоту квадратов карты над уровнем моря. Высота задается натуральным числом, не превышающим 10000. Считается, что квадраты, расположенные за пределами карты, имеют высоту 10001 (то есть вода никогда не утекает за пределы карты). Выходные данные В выходной файл OUTPUT.TXT выведите минимальное количество водостоков, которое необходимо построить. Например, вход: 4 5 1 2 3 1 10 1 4 3 10 10 1 5 5 5 5 6 6 6 6 6 выход: 2 Для Pascal ABC.NET СПАСИБО! нашла пример на турбо паскаль, но для меня это сложно( может быть как-то можно переделать? или по-другому решить Код:
|
20.03.2019, 10:22 | #2 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Код:
программа — запись алгоритма на языке понятном транслятору
|
20.03.2019, 18:28 | #3 |
Новичок
Джуниор
Регистрация: 19.03.2019
Сообщений: 3
|
спасибо! почему-то после первого begin на строчке
assign(input,InpFile); выдает ошибку "параметр цикла for должен описываться в заголовке цикла" |
20.03.2019, 21:38 | #4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
у меня ругалось на строчку
изменил на Код:
pabc_.png ДОБАВЛЕНО попытался запустить. во-первых, размерность с ошибкой. должна быть: Код:
Последний раз редактировалось Serge_Bliznykov; 20.03.2019 в 21:42. |
21.03.2019, 13:40 | #5 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
X>1, Y>1 надо при 1..maxM Цитата:
Код:
на "универсальный" 'вариант массива minM..MaxM Код:
Код:
for j:=minM to maxM do а может и не надо циклы менять ?
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 21.03.2019 в 13:44. |
||
21.03.2019, 14:13 | #6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
тоже самое - вываливается по переполнению стека.
я не разбирал алгоритм. Но, смотрите, поле у Вас 100x100 и Вы его в стеке целиком передаёте. процедура рекурсивная, всего несколько вызовов и всё - стек кончился. А зачем Вы вообще поле в стек засунули? Ведь в исходном примере такого не было! в общем, на примере из пост #1 корректно работает такая программа: Код:
НО! ДЛЯ ДРУГИХ ВАРИАНТОВ НЕ ТЕСТИРОВАЛ! |
21.03.2019, 14:33 | #7 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
ВДОГОНКУ.
для коллекции. исходный код из пост #1 после лёгкой корректировки тоже работает в PascalABC.NET Код:
Только его нужно погонять на тестах. |
21.03.2019, 14:46 | #8 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
мусора в поле быть не должно. Код:
Цитата:
в случае копирования массива в стек, да согласен целиком и полностью. а так там всего 100х100 =10 000 вызовов в самом неблагоприятном случае.(полная карта и совершенно плоский рельеф).
программа — запись алгоритма на языке понятном транслятору
|
||
21.03.2019, 15:13 | #9 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
const или var для параметра и в стеке будет только ссылка на массив, а не сам целиком
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Упростить решение Pascal: После каждого ингридента написано его количество, которое нужно добавлять в определенный момент времени, время для каждой части приготовления | nobody_nohead | Помощь студентам | 7 | 14.12.2016 09:23 |
Составьте процедуру обнуляющую минимальное количество элементов так, чтобы сумма элементов столбца не превышала заданную | KorsD | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 16.01.2015 10:03 |
Матрица минимальное количество сдвигов pascal | referent | Помощь студентам | 1 | 23.12.2012 01:03 |
Определить, какое количество цифр числа надо исправить, чтобы исправленное совпадало с обращенным к заданному числу M | Krusad | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 08.10.2012 12:54 |
Pascal, графика, нужно построить блок-схему | студент АГНИ | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 26.05.2012 10:57 |