void matrixRotation(vector<vector<int>> matrix, int r) {
int m = matrix.size(), n = matrix[0].size();
int numLayers = min(m, n) / 2;
// Rotate each layer r times
for (int layer = 0; layer < numLayers; layer++) {
int layerHeight = m - 2 * layer, layerWidth = n - 2 * layer;
int numRotations = r % (2 * (layerHeight + layerWidth - 2));
while (numRotations--) {
// Rotate right edge
for (int i = layer; i < layer + layerHeight - 1; i++) {
swap(matrix[i][n - layer - 1], matrix[i + 1][n - layer - 1]);
}
// Rotate bottom edge
for (int i = n - layer - 1; i > layer; i--) {
swap(matrix[m - layer - 1][i], matrix[m - layer - 1][i - 1]);
}
// Rotate left edge
for (int i = m - layer - 1; i > layer; i--) {
swap(matrix[i][layer], matrix[i - 1][layer]);
}
// Rotate top edge
for (int i = layer; i < layer + layerWidth - 2; i++) {
swap(matrix[layer][i], matrix[layer][i + 1]);
}
}
}
// Print the rotated matrix
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
No comments:
Post a Comment