Как вернуть матрицу NxN, которая была прочитана по диагонали? - PullRequest
0 голосов
/ 16 февраля 2011

Предположим, если у меня есть один двумерный массив

Я получил массив 'char input [N] [N]', который кто-то прочитал по диагонали.

Моя цель - воспроизвести оригиналмассив 'char input_original [N] [N]' из массива по диагонали 'char input [N] [N]' array

После чтения по диагонали, мой ввод:

adb

ceg -------------------> матрица A

hfi

и теперь я хочу сделать это как

abc

def -------------------> матрица B (входной_оригинальный массив)

ghi

Где матрица A - это выходное значение чтения по диагонали (a db ceg hf i -> сделало это как матрицу) матрицы B

Все предложения приветствуются.

1 Ответ

3 голосов
/ 16 февраля 2011

Я бы просто вычислил «путь» через вашу матрицу, если он диагональный, например,

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.

Я надеюсь, что ничего не испортил, ноЯ думаю, что это довольно практичный способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...