Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Сдвиг массива в любую из сторон


Автор: REZiaMIX 22.9.2013, 20:44
Вроде бы простая задача, но никак не могу сделать оптимальный алгоритм:
Есть двухмерный(квадратный) массив. Нужно сдвинуть его значения на N позиций по данному сдвигу, например:
1,0 - на 1 вправо
1,1 - на 1 вправо и на 1 вниз
-1,-2 - на 1 влево и на 2 вверх

При этом нужно обработать убывшие и прибывшие элементы. Например сделать delete для убывших, и прибывшие заполнить = new ArrayElement();

Даже не знаю как такое отгуглить, везде только про сдвиг в одну сторону. И кажется мне, что эта задача имеет простое решение.

Автор: feodorv 22.9.2013, 22:37
Цитата(REZiaMIX @  22.9.2013,  21:44 Найти цитируемый пост)
везде только про сдвиг в одну сторону

Ну так делайте аналогично, но только учитывая направление сдвига. У Вас всего 4 варианта:
  • dx >= 0, dy >= 0: движение по матрице справа-налево и снизу-вверх
  • dx >= 0, dy < 0: движение по матрице справа-налево и сверху-вниз
  • dx < 0, dy >= 0: движение по матрице слева-направо и снизу-вверх
  • dx < 0, dy < 0: движение по матрице слева-направо и сверху-вниз

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)