Сколько различных маршрутов может пройти пчелка из клетки A в клетку B на поле из шестиугольных клеток со стороной
Сколько различных маршрутов может пройти пчелка из клетки A в клетку B на поле из шестиугольных клеток со стороной N? Верхняя левая клетка содержит пчелку и она может перемещаться на клетку вниз, на клетку вниз-вправо или на клетку вверх-вправо. Необходимо написать программу, которая найдет количество возможных маршрутов пчелки в указанных правилах. Входные данные: в единственной строке дано число N - размеры шестиугольного поля (2 ≤ N ≤ 12). Выходные данные: вывести одно целое число, обозначающее количество маршрутов пчелки.
Zolotoy_Korol_2932 4
Для решения этой задачи нам потребуется использовать динамическое программирование. Мы можем рассмотреть каждую клетку на поле как узел в графе, а движение пчелки между клетками - как ребра в этом графе. Наша задача - найти количество путей из клетки A в клетку B на данном шестиугольном поле.Давайте создадим матрицу dp размером (N+1) x (N+1), где каждый элемент dp[i][j] будет хранить количество путей из клетки A до клетки с координатами (i, j). Мы будем заполнять эту матрицу сверху вниз и слева направо.
Изначально у нас есть только один путь - пчелка находится уже в клетке A. Это будет первый элемент матрицы dp, dp[0][0] = 1.
Далее мы будем заполнять матрицу dp по следующему алгоритму:
1. Для каждой клетки с координатами (i, j) в верхнем треугольнике матрицы dp (i ≤ j), количество путей из клетки A равно сумме количества путей из клеток, находящихся непосредственно ниже и левее текущей клетки.
- Если мы находимся на границе верхнего треугольника (j = N), то пчелка может перемещаться только вниз, поэтому dp[i][j] = dp[i-1][j].
- В противном случае, пчелка может перемещаться как вниз, так и вниз-вправо, поэтому dp[i][j] = dp[i-1][j] + dp[i][j-1].
2. Зеркально отражаем верхний треугольник матрицы dp относительно главной диагонали, чтобы заполнить нижний треугольник матрицы dp. Для каждой клетки с координатами (i, j) в нижнем треугольнике (i > j), количество путей из клетки A равно сумме количества путей из клеток, находящихся непосредственно ниже и правее текущей клетки.
- dp[i][j] = dp[j][i].
3. По окончании заполнения матрицы dp значение количества путей из клетки A в клетку B будет храниться в dp[N][N].
Давайте реализуем эту логику в программе на языке Python:
Пример работы программы:
Таким образом, при размере шестиугольного поля N = 4, количество возможных маршрутов пчелки из клетки A в клетку B равно 35.