#include <iostream>
#include <vector>
using namespace std;
void rotateMatrix(int n, vector<vector<int>>& matrix) {
// Pasul 1: Extragem elementele din cele patru zone
vector<int> zone1, zone2, zone3, zone4;
// Zona 1 (sus)
for (int j = 1; j < n; j++) {
zone1.push_back(matrix[1][j]);
}
// Zona 2 (dreapta)
for (int i = 1; i < n; i++) {
zone2.push_back(matrix[i][n]);
}
// Zona 3 (jos)
for (int j = n - 1; j >= 1; j--) {
zone3.push_back(matrix[n][j]);
}
// Zona 4 (stanga)
for (int i = n - 1; i >= 2; i--) {
zone4.push_back(matrix[i][1]);
}
// Pasul 2: Mutăm elementele în direcția acului de ceasornic
// Zonele vor fi mutate în ordine:
// Zona 4 -> Zona 1 -> Zona 2 -> Zona 3
int temp = zone4.back();
zone4.pop_back();
// Zona 4 devine Zona 1
zone1.insert(zone1.begin(), temp);
temp = zone1.back();
zone1.pop_back();
// Zona 1 devine Zona 2
zone2.insert(zone2.begin(), temp);
temp = zone2.back();
zone2.pop_back();
// Zona 2 devine Zona 3
zone3.insert(zone3.begin(), temp);
// Zona 3 devine Zona 4
zone4.insert(zone4.begin(), zone3.back());
zone3.pop_back();
// Pasul 3: Reintroducem elementele în matrice
int index = 0;
// Zona 1 (sus)
for (int j = 1; j < n; j++) {
matrix[1][j] = zone1[index++];
}
// Zona 2 (dreapta)
for (int i = 1; i < n; i++) {
matrix[i][n] = zone2[index++];
}
// Zona 3 (jos)
for (int j = n - 1; j >= 1; j--) {
matrix[n][j] = zone3[index++];
}
// Zona 4 (stanga)
for (int i = n - 1; i >= 2; i--) {
matrix[i][1] = zone4[index++];
}
}
int main() {
int n;
cout << "Introduceti dimensiunea matricei (n): ";
cin >> n;
vector<vector<int>> matrix(n + 1, vector<int>(n + 1)); // Indexare de la 1
cout << "Introduceti elementele matricei:" << endl;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> matrix[i][j];
}
}
rotateMatrix(n, matrix);
cout << "Matricea rotita:" << endl;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
return 0;
}