Как поменять местами числа в матрице?Си

Суть задачи - задана матрица целых чисел размером (N; N). Поменять местами две окрашенные области. Запрещено использование дополнительных массивов. Я пробовал сделать данную задачу через трёхмерный массив,но у меня это не получилось. Прошу подсказки.

Модель задачи:

описание задачивведите сюда описание изображения

#include <stdio.h>
#include <math.h>

int main()
{
     int R[4][4][4] = {
     { 4, 8, {11, 5}},
     { 2, 12, {9}, 14},
     { 0, 5, {0, 7} },
     { 1, 6, 3, {4} }
         
     };
     
    printf("Исходная матрица: \n");
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            for (int z = 0; z < 4; z++){
            
            printf("%d",R[i][j][z]);
            printf(" ");
            }
        }

    }
    for (int i = 0; i < 4; i++)
    {
        int tmp;
        tmp = R[0][i];  
        R[0][i] = R[1][i];  
        R[1][i] = tmp;
       
    }
    printf("\nИзмененная матрица:");
    printf("\n");

    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            for (int z = 0; z < 4; z++){
            printf("%d",R[i][j][z]);
            printf(" ");
            }
        }

    }
    
    return 0;
}

Ответы (1 шт):

Автор решения: Harry
#include <stdio.h>

#define  N  6

int main()
{
    int M[N][N] =
    {
        { 1, 2, 3, 4, 5, 6 },
        { 7, 8, 9, 0, 1, 2 },
        { 3, 4, 5, 6, 7, 8 },
        { 9, 0, 1, 2, 3, 4 },
        { 5, 6, 7, 8, 9, 0 },
        { 1, 2, 3, 4, 5, 6 }
    };

    for(int i = 0; i < N; ++i)
    {
        for(int j = 0; j < N; ++j)
            printf("%2d ",M[i][j]);
        puts("");
    }


    for(int i = 0; i <= (N-1)/2; ++i)
        for(int j = N/2; j <= N-i-1; ++j)
        {
            int t = M[i][j];
            M[i][j] = M[j][N-1-i];
            M[j][N-1-i] = t;
        }

    printf("\n\n");
    for(int i = 0; i < N; ++i)
    {
        for(int j = 0; j < N; ++j)
            printf("%2d ",M[i][j]);
        puts("");
    }
}
→ Ссылка