#include using namespace std; int main() { // Константи - брой редове (M) и колони (N) в матрицата const int M = 4, N = 6; // Дефиниция на матрица NxN и задаване на стойности int matrix[M][N] = { { 1, 2, 3, 4, 5, 6 }, { 16, 17, 18, 19, 20, 7 }, { 15, 24, 23, 22, 21, 8 }, { 14, 13, 12, 11, 10, 9 } }; // Променливи, нужни за обхождането int starti = 0, endi = M - 1; int startj = 0, endj = N - 1; // Обхождане в спирала (така, че числата да се изпишат последователно от 1 до 24) // Повтаряме долните цикли докато не станат невалидни ограниченията while (starti <= endi && startj <= endj) { // Обхождане хоризонтално ( --> ) реда starti for (int j = startj; j <= endj; j++) cout << matrix[starti][j] << ' '; // Увеличаване на starti, защото текущия ред (с номер starti) вече е обходен от цикъла starti++; // Обхождане вертикално надолу колоната endj for (int i = starti; i <= endi; i++) cout << matrix[i][endj] << ' '; // Намаляване на endj, защото текущия стълб (с номер endj) е вече обходен endj--; // Обхождане хоризонтално ( <-- ) реда endi for (int j = endj; j >= startj; j--) cout << matrix[endi][j] << ' '; // Аналогично на горните - намаляване на endi, защото реда endi е обходен endi--; // Обхождане вертикално нагоре колоната startj for (int i = endi; i >= starti; i--) cout << matrix[i][startj] << ' '; // Увеличаване на startj - колоната startj е вече обходена от горния цикъл startj++; } return 0; }