повернуть матрицу M * N против часовой стрелки - PullRequest
0 голосов
/ 10 января 2020

Я не могу повернуть матрицу M * N против часовой стрелки. Мой код работает правильно для матрицы 3 * 3, но когда я пытаюсь в любом другом случае, он не работает, предположим, что я делаю это для матрицы 4 * 4, тогда вращаются только внешние элементы, а внутренние 4 элемента, то есть 6,7,10,11 не вращаются. Мой ввод 1-16 чисел в виде матрицы 4 * 4 {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}

static void antirotatematrix(int m, 
                int n, int mat[][]) 
{ 
    int row = 0, col = n-1; 
    int prev, curr; 
    while (row < m && col < n ) 
    { 
        if (row+1 == m || col-1  == 0) {
            break; }
        prev = mat[row + 1][col]; 
        for (int i = col; i>= 0; i--) 
        { 
            curr = mat[row][i]; 
            mat[row][i] = prev; 
            prev = curr; 
        } 
        row++; 

        for (int i = row; i < m; i++) 
        {  
            curr = mat[i][0]; 
            mat[i][0] = prev; 
            prev = curr; 
        }
        n--; 

        if (row < m) {
            for (int i = n-2; i <= col; i++) 
            { 
                curr = mat[m-1][i]; 
                mat[m-1][i] = prev; 
                prev = curr; 
            } 
        } 
        m--;  
        if (col <= n) 
        { 
            for (int i = m-1; i >= row; i--) 
            { 
                curr = mat[i][col]; 
                mat[i][col] = prev; 
                prev = curr; 
            } 
        } 
        col++; 
    }
    for (int i = 0; i <= 3; i++) 
        { 
            for (int j = 0; j <= 3; j++) 
            System.out.print( mat[i][j] + " "); 
            System.out.print("\n"); 
        } 
}
...