С++: заполнение матрицы "змейкой"
...довольно распространённый тип задач, и довольно плохо решаемый в инете. Требуется получить нечто вот такое (матрицу)
0 1 2 3 4 5 11 10 9 8 7 6 12 13 14 15 16 17 23 22 21 20 19 18
или такое
0 7 8 15 16 23 1 6 9 14 17 22 2 5 10 13 18 21 3 4 11 12 19 20
Размерность заполняемой матрицы произвольна. Почему плохо решаемый? Потому что начинают вводить какие-то дополнительные счётчики и условия там, где достаточно "сквозного" номера элемента в цепочке (обозначен k
) и несложной зависимости значения элемента a[i][j]
от размерности матрицы и чётности или нечётности номера строки/столбца.
Первое заполнение делает функция rows_by_snake
, второе - cols_by_snake
, вот полный листинг примера:
#include <stdlib.h> #include <iostream.h> void rows_by_snake (int n, int m, int **a) { int i,j,k=0; for (i=0; i<n; i++) for (j=0; j<m; j++) { a[i][j]=(i%2?(i+1)*m-j-1:k); k++; } } void cols_by_snake (int n, int m, int **a) { int i,j,k=0; for (j=0; j<m; j++) for (i=0; i<n; i++) { a[i][j]=(j%2?(j+1)*n-i-1:k); k++; } } void output_matrix (int n,int m,int **a) { int i,j; for (i=0; i<n; i++) { cout << endl; for (j=0; j<m; j++) cout << a[i][j] << " "; } } int main () { const int n=4,m=6; int **a,i; a = new int * [n]; for (i=0; i<n; i++) a[i] = new int [m]; rows_by_snake (n,m,a); output_matrix (n,m,a); cols_by_snake (n,m,a); output_matrix (n,m,a); return 0; }
14.11.2013, 18:41 [22209 просмотров]