fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. void rotateClockwise(vector<vector<int>>& matrix) {
  7. int n = matrix.size();
  8. vector<int> elements; // pentru a stoca elementele din afara diagonalelor
  9.  
  10. // Colectăm elementele care sunt în afara diagonalelor
  11. for (int i = 0; i < n; ++i) {
  12. for (int j = 0; j < n; ++j) {
  13. if (i != j && i + j != n - 1) { // verificăm dacă nu sunt pe diagonala principală sau secundară
  14. elements.push_back(matrix[i][j]);
  15. }
  16. }
  17. }
  18.  
  19. // Rotim elementele în sensul acelor de ceasornic
  20. int k = 0; // index pentru elementele rotite
  21. for (int j = n - 1; j > 0; --j) { // pentru fiecare coloană de sus în jos
  22. for (int i = 0; i < n; ++i) {
  23. if (i != j && i + j != n - 1) { // verificăm din nou diagonalele
  24. matrix[i][j] = elements[k++];
  25. }
  26. }
  27. }
  28.  
  29. // Reintroducem elementele pe pozițiile corecte
  30. k = 0;
  31. for (int j = 0; j < n; ++j) {
  32. for (int i = 0; i < n; ++i) {
  33. if (i != j && i + j != n - 1) { // verificăm din nou diagonalele
  34. matrix[i][j] = elements[k++];
  35. }
  36. }
  37. }
  38. }
  39.  
  40. int main() {
  41. // Exemplu de matrice 4x4
  42. vector<vector<int>> matrix = {
  43. { 1, 2, 3, 4 },
  44. { 5, 6, 7, 8 },
  45. { 9, 10, 11, 12 },
  46. { 13, 14, 15, 16 }
  47. };
  48.  
  49. // Afișăm matricea originală
  50. cout << "Matricea originală:" << endl;
  51. for (const auto& row : matrix) {
  52. for (const auto& elem : row) {
  53. cout << elem << " ";
  54. }
  55. cout << endl;
  56. }
  57.  
  58. rotateClockwise(matrix);
  59.  
  60. // Afișăm matricea după rotație
  61. cout << "Matricea după rotație:" << endl;
  62. for (const auto& row : matrix) {
  63. for (const auto& elem : row) {
  64. cout << elem << " ";
  65. }
  66. cout << endl;
  67. }
  68.  
  69. return 0;
  70. }
  71.  
Success #stdin #stdout 0.01s 5280KB
stdin
3 
1 2 3
4 5 6 
7 8 9
stdout
Matricea originală:
1 2 3 4 
5 6 7 8 
9 10 11 12 
13 14 15 16 
Matricea după rotație:
1 5 9 4 
2 6 7 14 
3 10 11 15 
13 8 12 16