以下是一个可能的实现:

#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 
``
C++实现对一个n×n方阵中的每个元素循环向左移m个位置0mn

原文地址: http://www.cveoy.top/t/topic/fbMR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录