Skip to content

Instantly share code, notes, and snippets.

@georgyangelov
Created May 14, 2014 19:34
Show Gist options
  • Save georgyangelov/7aed4b7b2fccd523fd17 to your computer and use it in GitHub Desktop.
Save georgyangelov/7aed4b7b2fccd523fd17 to your computer and use it in GitHub Desktop.
#include <iostream>
using namespace std;
int main()
{
// Константи - брой редове (M) и колони (N) в матрицата
const int M = 4, N = 6;
// Дефиниция на матрица MxN и задаване на стойности
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;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment