fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. void rotateMatrix(int n, vector<vector<int>>& matrix) {
  7. // Pasul 1: Extragem elementele din cele patru zone
  8. vector<int> zone1, zone2, zone3, zone4;
  9.  
  10. // Zona 1 (sus)
  11. for (int j = 1; j < n; j++) {
  12. zone1.push_back(matrix[1][j]);
  13. }
  14.  
  15. // Zona 2 (dreapta)
  16. for (int i = 1; i < n; i++) {
  17. zone2.push_back(matrix[i][n]);
  18. }
  19.  
  20. // Zona 3 (jos)
  21. for (int j = n - 1; j >= 1; j--) {
  22. zone3.push_back(matrix[n][j]);
  23. }
  24.  
  25. // Zona 4 (stanga)
  26. for (int i = n - 1; i >= 2; i--) {
  27. zone4.push_back(matrix[i][1]);
  28. }
  29.  
  30. // Pasul 2: Mutăm elementele în direcția acului de ceasornic
  31. // Zonele vor fi mutate în ordine:
  32. // Zona 4 -> Zona 1 -> Zona 2 -> Zona 3
  33. int temp = zone4.back();
  34. zone4.pop_back();
  35.  
  36. // Zona 4 devine Zona 1
  37. zone1.insert(zone1.begin(), temp);
  38.  
  39. temp = zone1.back();
  40. zone1.pop_back();
  41.  
  42. // Zona 1 devine Zona 2
  43. zone2.insert(zone2.begin(), temp);
  44.  
  45. temp = zone2.back();
  46. zone2.pop_back();
  47.  
  48. // Zona 2 devine Zona 3
  49. zone3.insert(zone3.begin(), temp);
  50.  
  51. // Zona 3 devine Zona 4
  52. zone4.insert(zone4.begin(), zone3.back());
  53. zone3.pop_back();
  54.  
  55. // Pasul 3: Reintroducem elementele în matrice
  56. int index = 0;
  57. // Zona 1 (sus)
  58. for (int j = 1; j < n; j++) {
  59. matrix[1][j] = zone1[index++];
  60. }
  61.  
  62. // Zona 2 (dreapta)
  63. for (int i = 1; i < n; i++) {
  64. matrix[i][n] = zone2[index++];
  65. }
  66.  
  67. // Zona 3 (jos)
  68. for (int j = n - 1; j >= 1; j--) {
  69. matrix[n][j] = zone3[index++];
  70. }
  71.  
  72. // Zona 4 (stanga)
  73. for (int i = n - 1; i >= 2; i--) {
  74. matrix[i][1] = zone4[index++];
  75. }
  76. }
  77.  
  78. int main() {
  79. int n;
  80. cout << "Introduceti dimensiunea matricei (n): ";
  81. cin >> n;
  82.  
  83. vector<vector<int>> matrix(n + 1, vector<int>(n + 1)); // Indexare de la 1
  84.  
  85. cout << "Introduceti elementele matricei:" << endl;
  86. for (int i = 1; i <= n; i++) {
  87. for (int j = 1; j <= n; j++) {
  88. cin >> matrix[i][j];
  89. }
  90. }
  91.  
  92. rotateMatrix(n, matrix);
  93.  
  94. cout << "Matricea rotita:" << endl;
  95. for (int i = 1; i <= n; i++) {
  96. for (int j = 1; j <= n; j++) {
  97. cout << matrix[i][j] << " ";
  98. }
  99. cout << endl;
  100. }
  101.  
  102. return 0;
  103. }
  104.  
Success #stdin #stdout 0.01s 5292KB
stdin
3
1 2 3
4 5 6
7 8 9
stdout
Introduceti dimensiunea matricei (n): Introduceti elementele matricei:
Matricea rotita:
4 1 6 
113 5 0 
0 0 9