Я бы просто вычислил «путь» через вашу матрицу, если он диагональный, например,
1--2 3--4 5
/ / / /|
/ / / / |
6 7 8 9 10
| / / / /
|/ / / /
11 12 13 14 15
/ / / /|
/ / / / |
16 17 18 19 20
| / / / /
| / / / /
21 22-23 24-25
Это означает, что вы сохраняете индексы в том порядке, в котором вы их читаете.Вы можете просто заполнить свою матрицу в соответствии с этими индексами.
Так что самым сложным в этом случае является способ вычисления пути.Вы можете сделать это следующим образом: Прежде всего, мы признаем, что путь состоит исключительно из четырех направлений:
- вправо (R)
- вправо вверх (UR)
- вниз (D)
- вниз влево (DL)
Кроме того, мы признаем, что допускаются только некоторые порядки направлений:
- R-DL
- DL-DL
- DL-D
- DL-R
- D-UR
- UR-UR
- UR-R
Используя эти знания, можно без проблем вычислить путь: нам просто нужно сохранить последнее направление и текущую позицию.Затем мы должны вычислить следующее направление следующим образом:
- , если последнее направление было UR, мы пробуем UR, и если это невозможно, мы идем R.
- , еслипоследнее направление было DL, мы пытаемся DL, и если это невозможно, мы идем D, если это также невозможно, мы идем R.
Я надеюсь, что ничего не испортил, ноЯ думаю, что это довольно практичный способ сделать это.