Paths in the Grid

Problem #40

Tags: dynamic-programming arrays c-1 c-0 popular-algorithm

Who solved this?

Back to English version

Динамічне програмування є інструментом для вирішення задач, що набули популярності серед азартних програмістів та авторів коду на сайтах типу TopCoder. Потрібно освоїти підрахунок маршрутів у прямокутній сітці (до прикладу, це може бути квартал міста).

Уявіть карту болотистої місцевості, що представлена прямокутною сіткою:

@ + + + +
+ + + X X
+ X + + +
+ + + X +
+ X + + X
+ + + + $

де X зображає яму (непрохідну клітинку, де людина гарантовано потоне), натомість клітинки + безпечні для проходу.

Герой повинен пройти від верхнього лівого кута (з позначкою @) до нижнього правого (позначений $). Пересуватись він може лише безпечними клітинками, причому з кожної з них він вправі переходити на наступну або праворуч або вниз (згідно карти). Зворотній рух (ліворуч і догори) заборонений: у нашого героя обмежена кількість їди в торбинці.

Потрібно дізнатися, скільки різних маршрутів можна прокласти від одного кута до іншого, згідно поданих правил.

Вхідні дані у першому рядку містять число рядів та стовпців нашої сітки: M та N. Відтак поле сітки складається з M рядків, кожен з яких містить N символів, розділених пробілом. Непрохідні клітинки позначені символом X.
Відповідь повинна містити єдине число - кількість можливих маршрутів.

Результат гарантовано не повинен перевищити 2,000,000,000. Однак можливим є варіант, що маршрутів нема взагалі.

Приклад:

вхідні дані:
6 5
@ + + + +
+ + + X X
+ X + + +
+ + + X +
+ X + + X
+ + + + $

відповідь:
9

На сайті ProjectEuler є версія аналогічної загадки без перешкод: Lattice Paths - радимо насамперед обдумати її, якщо на думку не спадає жодних рішень.

You need to login to get test data and submit solution.