#include <stdio.h>
#include <malloc.h>
float** matrix_read(FILE* _in, int* N);
void matrix_free(float** m, int N);
void matrix_ssort(float** m, int N);
int main(void){
int n, i, j;
float** m = matrix_read(stdin, &n);
/* из файла
FILE* fp = fopen("file.txt", "rt");
float** m = matrix_read(fp, &n);
if(m == NULL)
return 1;
fclose(fp);
*/
//иходный вывод матрицы
for(i = 0; i < n; ++i){
for(j = 0; j < n; ++j)
}
matrix_ssort(m, n);
//вывод после сортировки
for(i = 0; i < n; ++i){
for(j = 0; j < n; ++j)
}
matrix_free(m, n);
return 0;
}
//выборочная сортировка диагоналей матрицы по убыванию
void matrix_ssort(float** m, int N){
int r, c, r0, c0, r1, c1, r2, c2;
float t;
r0 = N - 2;
c0 = 0;
while(c0 < (N - 1)){
r = r0;
c = c0;
while((r < N) && (c < N)){
r2 = r;
c2 = c;
for(r1 = r + 1, c1 = c + 1; (r1 < N) && (c1 < N); ++r1, ++c1){
if(m[r1][c1] > m[r2][c2]){
r2 = r1;
c2 = c1;
}
}
if((r2 != r) || (c2 != c)){
t = m[r][c];
m[r][c] = m[r2][c2];
m[r2][c2] = t;
}
++r;
++c;
}
if(r0 > 0)
--r0;
else if(! r0)
++c0;
}
}
//чтение матрицы из файла или консоли
float** matrix_read(FILE* _in, int* N){
float** m;
int i, j, n = 0;
if((fscanf(_in
, "%d", &n
) != 1) || (n
< 2)) return NULL;
m
= (float**)malloc((size_t)n
* sizeof(float*)); if(m == NULL)
return NULL;
for(i = 0; i < n; ++i){
m
[i
] = (float*)malloc((size_t)n
* sizeof(float)); if(m[i] == NULL)
goto err;
for(j = 0; j < n; ++j){
if(fscanf(_in
, "%f", &m
[i
][j
]) != 1) goto err;
goto err;
}
}
*N = n;
return m;
err:
for(j = i - 1; j >= 0; --j)
*N = 0;
return NULL;
}
//удаление матрицы
void matrix_free(float** m, int N){
int i;
for(i = 0; i < N; ++i)
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYWxsb2MuaD4KZmxvYXQqKiBtYXRyaXhfcmVhZChGSUxFKiBfaW4sIGludCogTik7CnZvaWQgICAgbWF0cml4X2ZyZWUoZmxvYXQqKiBtLCBpbnQgTik7CnZvaWQgICAgbWF0cml4X3Nzb3J0KGZsb2F0KiogbSwgaW50IE4pOwoKCmludCBtYWluKHZvaWQpewoJaW50ICAgICBuLCBpLCBqOwoJZmxvYXQqKiBtID0gbWF0cml4X3JlYWQoc3RkaW4sICZuKTsKLyogINC40Lcg0YTQsNC50LvQsAoJRklMRSogICBmcCA9IGZvcGVuKCJmaWxlLnR4dCIsICJydCIpOwoJZmxvYXQqKiBtICA9IG1hdHJpeF9yZWFkKGZwLCAmbik7CglpZihtID09IE5VTEwpCgkJcmV0dXJuIDE7CglmY2xvc2UoZnApOwoqLwoJLy/QuNGF0L7QtNC90YvQuSDQstGL0LLQvtC0INC80LDRgtGA0LjRhtGLCglmb3IoaSA9IDA7IGkgPCBuOyArK2kpewoJCWZvcihqID0gMDsgaiA8IG47ICsraikKCQkJcHJpbnRmKCIlZyAiLCBtW2ldW2pdKTsKCQlwdXRjaGFyKCdcbicpOwoJfQoJcHV0Y2hhcignXG4nKTsKCgltYXRyaXhfc3NvcnQobSwgbik7CgoJLy/QstGL0LLQvtC0INC/0L7RgdC70LUg0YHQvtGA0YLQuNGA0L7QstC60LgKCWZvcihpID0gMDsgaSA8IG47ICsraSl7CgkJZm9yKGogPSAwOyBqIDwgbjsgKytqKQoJCQlwcmludGYoIiVnICIsIG1baV1bal0pOwoJCXB1dGNoYXIoJ1xuJyk7Cgl9CgltYXRyaXhfZnJlZShtLCBuKTsKCXJldHVybiAwOwp9CgovL9Cy0YvQsdC+0YDQvtGH0L3QsNGPINGB0L7RgNGC0LjRgNC+0LLQutCwINC00LjQsNCz0L7QvdCw0LvQtdC5INC80LDRgtGA0LjRhtGLINC/0L4g0YPQsdGL0LLQsNC90LjRjgp2b2lkIG1hdHJpeF9zc29ydChmbG9hdCoqIG0sIGludCBOKXsKCWludCAgIHIsIGMsIHIwLCBjMCwgcjEsIGMxLCByMiwgYzI7CglmbG9hdCB0OwoKCXIwID0gTiAtIDI7CgljMCA9IDA7Cgl3aGlsZShjMCA8IChOIC0gMSkpewoJCXIgPSByMDsKCQljID0gYzA7CgkJd2hpbGUoKHIgPCBOKSAmJiAoYyA8IE4pKXsKCQkJcjIgPSByOwoJCQljMiA9IGM7CgkJCWZvcihyMSA9IHIgKyAxLCBjMSA9IGMgKyAxOyAocjEgPCBOKSAmJiAoYzEgPCBOKTsgKytyMSwgKytjMSl7CgkJCQlpZihtW3IxXVtjMV0gPiBtW3IyXVtjMl0pewoJCQkJCXIyID0gcjE7CgkJCQkJYzIgPSBjMTsKCQkJCX0KCQkJfQoKCQkJaWYoKHIyICE9IHIpIHx8IChjMiAhPSBjKSl7CgkJCQl0ICAgICAgICAgPSBtW3JdW2NdOwoJCQkJbVtyXVtjXSAgID0gbVtyMl1bYzJdOwoJCQkJbVtyMl1bYzJdID0gdDsKCQkJfQoJCQkrK3I7CgkJCSsrYzsKCQl9CgoJCWlmKHIwID4gMCkKCQkJLS1yMDsKCQllbHNlIGlmKCEgcjApCgkJCSsrYzA7Cgl9Cn0KCi8v0YfRgtC10L3QuNC1INC80LDRgtGA0LjRhtGLINC40Lcg0YTQsNC50LvQsCDQuNC70Lgg0LrQvtC90YHQvtC70LgKZmxvYXQqKiBtYXRyaXhfcmVhZChGSUxFKiBfaW4sIGludCogTil7CglmbG9hdCoqIG07CglpbnQgICAgIGksIGosIG4gPSAwOwoJaWYoKGZzY2FuZihfaW4sICIlZCIsICZuKSAhPSAxKSB8fCAobiA8IDIpKQoJCXJldHVybiBOVUxMOwoJCgltID0gKGZsb2F0KiopbWFsbG9jKChzaXplX3QpbiAqIHNpemVvZihmbG9hdCopKTsKCWlmKG0gPT0gTlVMTCkKCQlyZXR1cm4gTlVMTDsKCglmb3IoaSA9IDA7IGkgPCBuOyArK2kpewoJCW1baV0gPSAoZmxvYXQqKW1hbGxvYygoc2l6ZV90KW4gKiBzaXplb2YoZmxvYXQpKTsKCQlpZihtW2ldID09IE5VTEwpCgkJCWdvdG8gZXJyOwoKCQlmb3IoaiA9IDA7IGogPCBuOyArK2opewoJCQlpZihmc2NhbmYoX2luLCAiJWYiLCAmbVtpXVtqXSkgIT0gMSkKCQkJCWdvdG8gZXJyOwoJCQlpZihmZXJyb3IoX2luKSAhPSAwKQoJCQkJZ290byBlcnI7CgkJfQoJfQoJKk4gPSBuOwoJcmV0dXJuIG07CmVycjoKCWZvcihqID0gaSAtIDE7IGogPj0gMDsgLS1qKQoJCWZyZWUobVtqXSk7CglmcmVlKG0pOwoJKk4gPSAwOwoJcmV0dXJuIE5VTEw7Cn0KCi8v0YPQtNCw0LvQtdC90LjQtSDQvNCw0YLRgNC40YbRiwp2b2lkICBtYXRyaXhfZnJlZShmbG9hdCoqIG0sIGludCBOKXsKCWludCBpOwoJZm9yKGkgPSAwOyBpIDwgTjsgKytpKQoJCWZyZWUobVtpXSk7CglmcmVlKG0pOwp9