2015-06-04 2 views
0

Я пишу программу в C, и мне нужна матрица M x N для вращения по часовой стрелке. Я пробовал некоторые алгоритмы, но они работают только в матрицах N x N.C - вращение матрицы

Матрица {(1,4), (2,5), (3,6)} должна стать {(3,2,1), (6,5,4)}:

1 4 
2 5 -> 3 2 1 
3 6  6 5 4 

Я написал этот кусок кода, чтобы транспонировать матрицу, и теперь я не знаю, как поменять местами столбцы:

void transpose(int matrix[MAX][MAX], int m, int n) 
 
{ 
 
    int transpose[MAX][MAX], d, c; 
 

 
    for (c = 0; c < m; c++) 
 
     for(d = 0 ; d < n ; d++) 
 
     transpose[d][c] = matrix[c][d]; 
 

 
    for (c = 0; c < n; c++) 
 
     for(d = 0; d < m; d++) 
 
      matrix[c][d] = transpose[c][d]; 
 
}

+1

Разделяя Ваше исследование помогает всем. Расскажите, что вы пробовали и почему это не соответствовало вашим потребностям. Это демонстрирует, что вы потратили время, чтобы попытаться помочь себе, это избавляет нас от повторения очевидных ответов и, прежде всего, помогает вам получить более конкретный и релевантный ответ! Также см. [Как спросить] (http://stackoverflow.com/questions/how-to-ask) – Eregrith

+1

, что было бы полезно, чтобы расширить NxM до NxN или MxM в зависимости от того, что больше и заполнить новые строки псевдою -значения, затем поверните и, наконец, удалите псевдо-строки –

+1

Как обычно, с любой алгоритмической проблемой метод одинаков: 1) как вы это сделаете; 2) Как бы вы это сделали, если бы вы были автоматизированной машиной, способной просто пошаговую обработку; 3) Реализуйте этот алгоритм на выбранном вами языке. – Eregrith

ответ

1

Вот эта идея. Я реализовал его на Java, но он должен работать так же, как и в C. Идея состоит в том, чтобы читал строку массива с большим мудрым с конца и заполнял другой массив с большим начальным номером, начиная с начала.

int a[][]={{1,4},{2,5},{3,6}}; 
    int m=3,n=2; //you will need to edit this and actually calculate rows and columns. 

    int b[][]=new int[n][m]; 

    for(int i=m-1; i>=0; i--) 
     for(int j=0; j<n; j++) 
     b[j][m-i-1]=a[i][j]; 


    for(int i=0; i<n; i++) { 
     for(int j=0; j<m; j++) 
      System.out.print(b[i][j]+"\t"); 
     System.out.println(); 
    } 

Выход на: https://ideone.com/TveuB5

+0

Awesome !! Получил это, это было проще, чем я мог себе представить! спасибо !! –

Смежные вопросы