#include <iostream>
using namespace std;
void print_spiral(int *matrix, int rows, int cols);
int main() {
int matrix1[1][4] = { {0,1,2,3} };
int matrix2[2][4] = { {0,1,2,3},
{4,5,6,7} };
int matrix3[3][4] = { {0,1,2,3},
{4,5,6,7},
{8,9,10,11} };
int matrix4[2][2] = { {0,1},
{4,5} };
int matrix5[3][3] = { {1,2,3},
{4,5,6},
{7,8,9} };
int matrix6[3][5] = { {0,1,2,3,4},
{4,5,6,7,8},
{8,9,10,11,12} };
int matrix7[3][1] = { {0},
{1},
{2} };
cout << "matrix1\n"; print_spiral((int*)matrix1, 1, 4); cout << endl;
cout << "matrix2\n"; print_spiral((int*)matrix2, 2, 4); cout << endl;
cout << "matrix3\n"; print_spiral((int*)matrix3, 3, 4); cout << endl;
cout << "matrix4\n"; print_spiral((int*)matrix4, 2, 2); cout << endl;
cout << "matrix5\n"; print_spiral((int*)matrix5, 3, 3); cout << endl;
cout << "matrix6\n"; print_spiral((int*)matrix6, 3, 5); cout << endl;
cout << "matrix7\n"; print_spiral((int*)matrix7, 3, 1); cout << endl;
return 0;
}
void print_spiral(int *matrix, int rows, int cols) {
int min = rows > cols ? cols : rows;
for (int k = 0; 2*k < min; k++) {
if (k == rows-k-1) {
for (int i = k; i < cols-k; i++)
cout << matrix[k*cols+i] << " ";
} else if (k == cols-k-1) {
for (int i = k; i < rows-k; i++)
cout << matrix[i*cols+k] << " ";
} else {
for (int i = k; i < cols-k-1; i++)
cout << matrix[k*cols+i] << " ";
for (int i = k; i < rows-k-1; i++)
cout << matrix[i*cols+cols-k-1] << " ";
for (int i = cols-k-1; i > k; i--)
cout << matrix[(rows-k-1)*cols+i] << " ";
for (int i = rows-k-1; i > k; i--)
cout << matrix[i*cols+k] << " ";
}
}
}