C++实现对一个n×n方阵中的每个元素循环向左移m个位置0mn
以下是一个可能的实现:
#include <iostream>
#include <vector>
void rotate(std::vector<std::vector<int>>& matrix, int m) {
int n = matrix.size();
for (int i = 0; i < n / 2; i++) {
for (int j = i; j < n - i - 1; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[(i + m) % n][(j + m) % n];
matrix[(i + m) % n][(j + m) % n] = temp;
}
}
}
int main() {
int n = 4, m = 2; // 4x4 matrix, rotate left by 2 positions
std::vector<std::vector<int>> matrix(n, std::vector<int>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = i * n + j + 1;
}
}
std::cout << "Original matrix:\n";
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
std::cout << matrix[i][j] << " ";
}
std::cout << "\n";
}
rotate(matrix, m);
std::cout << "Rotated matrix:\n";
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
std::cout << matrix[i][j] << " ";
}
std::cout << "\n";
}
return 0;
}
这个程序首先创建一个4x4的矩阵,并初始化为:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
然后调用rotate函数来对矩阵进行旋转,将每个元素向左移动2个位置。rotate函数的实现是一个常见的矩阵旋转算法,它通过分别遍历矩阵的四个边来实现旋转。对于每个元素,它的新位置是原来的位置加上m,然后对n取模以保证不越界。最后,程序输出旋转前后的矩阵。输出应该为:
Original matrix:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Rotated matrix:
3 4 1 2
7 8 5 6
11 12 9 10
15 16 13 14
``
原文地址: http://www.cveoy.top/t/topic/fbMR 著作权归作者所有。请勿转载和采集!