БлогNot. С++: заполнение матрицы "змейкой"

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

С++: заполнение матрицы "змейкой"

...довольно распространённый тип задач, и довольно плохо решаемый в инете. Требуется получить нечто вот такое (матрицу)

 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;
}

теги: c++ числа алгоритм

14.11.2013, 18:41; рейтинг: 12224

  свежие записипоиск по блогукомментариистатистика

Наверх Яндекс.Метрика
© PerS
вход