AcWing 1336. 矩阵
原题链接
简单
作者:
王小强
,
2021-02-08 18:03:28
,
所有人可见
,
阅读 329
Simulation … (感觉自已的码风不是最好!!!)
#include <iostream>
#include <vector>
using namespace std;
int n, q;
// ########## helper function begin ##########
void transpose(vector<vector<int>>& matrix) {
for (int y = 0; y < n - 1; ++y)
for (int x = y + 1; x < n; ++x)
swap(matrix[y][x], matrix[x][y]);
}
void rotateByRow(vector<vector<int>>& matrix, int k) {
vector<vector<int>> grid(n, vector<int>(n));
for (int y = 0; y < n; ++y)
for (int x = 0; x < n; ++x)
grid[(y + k) % n][x] = matrix[y][x];
matrix.assign(begin(grid), end(grid));
}
void rotateByColumn(vector<vector<int>>& matrix, int k) {
vector<vector<int>> grid(n, vector<int>(n));
for (int x = 0; x < n; ++x)
for (int y = 0; y < n; ++y)
grid[y][(x + k) % n] = matrix[y][x];
matrix.assign(begin(grid), end(grid));
}
void printMatrix(vector<vector<int>>& matrix) {
for (int y = 0; y < n; ++y) {
for (int x = 0; x < n; ++x) printf("%d ", matrix[y][x]);
printf("\n");
}
}
// ########## helper function end ##########
int main() {
// handle input
cin >> n;
vector<vector<int>> matrix(n, vector<int>(n)); // n阶矩阵
for (int y = 0; y < n; ++y)
for (int x = 0; x < n; ++x)
cin >> matrix[y][x];
cin >> q;
while (q--) {
int op, k;
cin >> op; // op == operation
switch (op) {
case 1: transpose(matrix); break;
case 2: cin >> k, rotateByRow(matrix, k); break;
case 3: cin >> k, rotateByColumn(matrix, k); break;
}
}
// output
printMatrix(matrix);
return 0;
}