#include <stdio.h>
#define M 3
typedef int Marray_t[M][M];
void transpose_v1(Marray_t A) {
int i, j;
int *startAddress = &A[0][0];
for (i=0; i<M; i++) {
for (j=0; j<M; j++) {
int* y = startAddress + (i*M+j);
int* u = startAddress + (j*M+i);
int temp;
temp = *y;
*y = *u;
*u = temp;
}
}
}
void transpose_v2(Marray_t A) {
int i, j;
int *startAddress = &A[0][0];
for (i=0; i<M; i++) {
for (j=0; j<i; j++) {
int* y = startAddress + (i*M+j);
int* u = startAddress + (j*M+i);
int temp;
temp = *y;
*y = *u;
*u = temp;
}
}
}
void print(Marray_t A) {
int i, j;
for(i = 0; i < M; ++i) {
for(j
= 0; j
< M
; ++j
) printf("%d ", A
[i
][j
]); }
}
int main(void) {
int arr1[M][M] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int arr2[M][M] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
print(arr1);
print(arr2);
transpose_v1(arr1);
transpose_v2(arr2);
print(arr1);
print(arr2);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIE0gMwp0eXBlZGVmIGludCBNYXJyYXlfdFtNXVtNXTsKCnZvaWQgdHJhbnNwb3NlX3YxKE1hcnJheV90IEEpIHsKICAgIGludCBpLCBqOwogICAgaW50ICpzdGFydEFkZHJlc3MgPSAmQVswXVswXTsKICAgIGZvciAoaT0wOyBpPE07IGkrKykgewogICAgICAgIGZvciAoaj0wOyBqPE07IGorKykgewogICAgICAgICAgICBpbnQqIHkgPSBzdGFydEFkZHJlc3MgKyAoaSpNK2opOwogICAgICAgICAgICBpbnQqIHUgPSBzdGFydEFkZHJlc3MgKyAoaipNK2kpOwogICAgICAgICAgICBpbnQgdGVtcDsKICAgICAgICAgICAgdGVtcCA9ICp5OwogICAgICAgICAgICAqeSA9ICp1OwogICAgICAgICAgICAqdSA9IHRlbXA7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIHRyYW5zcG9zZV92MihNYXJyYXlfdCBBKSB7CiAgICBpbnQgaSwgajsKICAgIGludCAqc3RhcnRBZGRyZXNzID0gJkFbMF1bMF07CiAgICBmb3IgKGk9MDsgaTxNOyBpKyspIHsKICAgICAgICBmb3IgKGo9MDsgajxpOyBqKyspIHsKICAgICAgICAgICAgaW50KiB5ID0gc3RhcnRBZGRyZXNzICsgKGkqTStqKTsKICAgICAgICAgICAgaW50KiB1ID0gc3RhcnRBZGRyZXNzICsgKGoqTStpKTsKICAgICAgICAgICAgaW50IHRlbXA7CiAgICAgICAgICAgIHRlbXAgPSAqeTsKICAgICAgICAgICAgKnkgPSAqdTsKICAgICAgICAgICAgKnUgPSB0ZW1wOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBwcmludChNYXJyYXlfdCBBKSB7CiAgaW50IGksIGo7CiAgZm9yKGkgPSAwOyBpIDwgTTsgKytpKSB7CiAgICBmb3IoaiA9IDA7IGogPCBNOyArK2opIHByaW50ZigiJWQgIiwgQVtpXVtqXSk7CiAgICBwcmludGYoIlxuIik7CiAgfQp9CgppbnQgbWFpbih2b2lkKSB7CglpbnQgYXJyMVtNXVtNXSA9IHsgezEsIDIsIDN9LCB7NCwgNSwgNn0sIHs3LCA4LCA5fX07CglpbnQgYXJyMltNXVtNXSA9IHsgezEsIDIsIDN9LCB7NCwgNSwgNn0sIHs3LCA4LCA5fX07CgkKCXByaW50ZigiYXJyMTpcbiIpOwoJcHJpbnQoYXJyMSk7CglwcmludGYoImFycjI6XG4iKTsKCXByaW50KGFycjIpOwoKCXRyYW5zcG9zZV92MShhcnIxKTsKCXRyYW5zcG9zZV92MihhcnIyKTsKCglwcmludGYoImFycjE6XG4iKTsKCXByaW50KGFycjEpOwoJcHJpbnRmKCJhcnIyOlxuIik7CglwcmludChhcnIyKTsKCXJldHVybiAwOwp9Cg==