Сколько различных маршрутов может пройти пчелка из клетки A в клетку B на поле из шестиугольных клеток со стороной

  • 12
Сколько различных маршрутов может пройти пчелка из клетки 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:

python
def count_routes(N):
dp = [[0] * (N+1) for _ in range(N+1)]
dp[0][0] = 1

for i in range(1, N+1):
for j in range(i, N+1):
if j == N:
dp[i][j] = dp[i-1][j]
else:
dp[i][j] = dp[i-1][j] + dp[i][j-1]

for i in range(0, N):
for j in range(i+1, N+1):
dp[j][i] = dp[i][j]

return dp[N][N]

N = int(input())
print(count_routes(N))


Пример работы программы:

Входные данные:
4

Выходные данные:
35


Таким образом, при размере шестиугольного поля N = 4, количество возможных маршрутов пчелки из клетки A в клетку B равно 35.