матрица организованная в виде списка

  • Автор темы kentochek
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

kentochek

#1
Помогите, кто может!!!!!!!!!!!!. Как организовать матрицу размера MxN в виде связного списка, а затем её повернуть на 90 градусов. Главная проблема состоит в том, каким образом определенному элементу текущей матрицы присвоить новый номер полученной матрицы. Все операции нужно производить с помощью указателей.
 

grigsoft

Well-known member
15.11.2005
735
0
#2
какое-то невнятное и само задание, и способ решения. Что должно быть на выходе? Если список, то причем здесь индексы? Индексы как раз проблемы не составляют -
(i,j)->(j, m-i-1).
Это если я правильно понял условие и матрица (M=2, N=3)
ABC
DEF
перейдет в матрицу
DA
EB
FC

А вот как это преобразование выполнить в списке?
Можно , например, представить оригинальную матрицу по столбцам:
A-D-B-E-C-F
Тогда надо будет только изменить порядок на обратный в группах по М элементов. Результат считать как матрицу, представленную в списке по строкам.
 
K

kentochek

#3
Задание ты понял правильно. И как раз проблема состоит в том, как выполнить преобразование (поворот) в самом списке, не нарушая структуру самого списка, т.е. если был элемент (1,2) то он после преобразования должен иметь индекс (2,1) если поворачиваем против часовой стрелки. Если есть какие-то идеи по реализации, то если не сложно напиши
 

grigsoft

Well-known member
15.11.2005
735
0
#4
Ну я бы в свои студенческие годы взялся поспорить с преподом что с такой формулировкой манипуляций со списком не требуется вообще.
Т.е. программа (по его мнению) состоит из этапов:
1. Ввод матрицы в обычном виде
2. Пробразование ее в список
3. Манипуляция со списком
4. Вывод результирующей матрицы

На самом деле список с результирующей матрицей можно получить за один проход на этапе 2, заявив что это способ представления такой.

Если же способ представления меняться не должен, то потребуются всякие извращения. В нашем случае список ABCDEF должен превратится в DAEBFC. Тупое решение в лоб - вытягивать в начало списка элементы по новому порядку. Т.е. какой элемент должен стоять в новой матрице в (0, 0)? Это (М-1,0) из старой, находим его в списке и перемещаем в начало.
Вот тут сложный вопрос - если в списке будут только значения из матрицы, то индексы мы можем определять только по положению элемента, значит вместо передвинутого надо вставлять какую-нибудь пустышку, чтобы порядок не менялся. Потом все пустышки не зыбыть удалить. Второй вариант - просто хранить координаты вместе со значением. Есть и третий вариант - каким-то образом учитывать уже перемещенные элементы, отсчитывая позицию, но тут уже надо повозится с деталями.
 
Статус
Закрыто для дальнейших ответов.