Giới thiệu
Trong bài viết này, chúng ta sẽ tìm hiểu cách xoay các phần tử của ma trận (matrix rotation). Ma trận là biểu diễn các phần tử theo hàng và cột. Xoay ma trận là dịch chuyển vị trí mỗi phần tử 1 vị trí về bên phải hoặc trái.
Minh họa
Đầu vào:
The matrix is defined as 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Đầu ra mong muốn:
The matrix after one rotation: 5 1 2 3 9 10 6 4 13 11 7 8 14 15 16 12
Thuật toán
- Bắt đầu
- Khai báo: ma trận
input_matrix, 4 số nguyênrow,column,previous,next - Khởi tạo giá trị
- Duyệt ma trận bằng vòng lặp
while, dịch chuyển từng phần tử 1 vị trí sang phải dùng nhiều vòng lặpfor, lưu ma trận - Hiển thị kết quả
- Kết thúc
Ví dụ 1: Nhập từ bàn phím
public class RotateMatrix {
static int Rows = 4;
static int Columns = 4;
public static void main(String[] args) {
int input_matrix[][] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
System.out.println("The input_matrix is defined as ");
for (int i = 0; i < Rows; i++) {
for (int j = 0; j < Columns; j++)
System.out.print(input_matrix[i][j] + " ");
System.out.print("\n");
}
int m = Rows, n = Columns;
int row = 0, column = 0;
int previous, current;
while (row < m && column < n) {
if (row + 1 == m || column + 1 == n)
break;
previous = input_matrix[row + 1][column];
for (int i = column; i < n; i++) {
current = input_matrix[row][i];
input_matrix[row][i] = previous;
previous = current;
}
row++;
for (int i = row; i < m; i++) {
current = input_matrix[i][n-1];
input_matrix[i][n-1] = previous;
previous = current;
}
n--;
if (row < m) {
for (int i = n-1; i >= column; i--) {
current = input_matrix[m-1][i];
input_matrix[m-1][i] = previous;
previous = current;
}
}
m--;
if (column < n) {
for (int i = m-1; i >= row; i--) {
current = input_matrix[i][column];
input_matrix[i][column] = previous;
previous = current;
}
}
column++;
}
System.out.println("\nThe input_matrix after one rotation: ");
for (int i = 0; i < Rows; i++) {
for (int j = 0; j < Columns; j++)
System.out.print(input_matrix[i][j] + " ");
System.out.print("\n");
}
}
}
Đầu ra
The input_matrix is defined as 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 The input_matrix after one rotation: 5 1 2 3 9 10 6 4 13 11 7 8 14 15 16 12
Ví dụ 2: Tách hàm static (OOP)
public class RotateMatrix {
static int Rows = 4;
static int Columns = 4;
static void Rotate_matrix(int m, int n, int matrix[][]) {
int row = 0, column = 0;
int previous, current;
while (row < m && column < n) {
if (row + 1 == m || column + 1 == n)
break;
previous = matrix[row + 1][column];
for (int i = column; i < n; i++) {
current = matrix[row][i];
matrix[row][i] = previous;
previous = current;
}
row++;
for (int i = row; i < m; i++) {
current = matrix[i][n-1];
matrix[i][n-1] = previous;
previous = current;
}
n--;
if (row < m) {
for (int i = n-1; i >= column; i--) {
current = matrix[m-1][i];
matrix[m-1][i] = previous;
previous = current;
}
}
m--;
if (column < n) {
for (int i = m-1; i >= row; i--) {
current = matrix[i][column];
matrix[i][column] = previous;
previous = current;
}
}
column++;
}
System.out.println("\nThe matrix after one rotation: ");
for (int i = 0; i < Rows; i++) {
for (int j = 0; j < Columns; j++)
System.out.print(matrix[i][j] + " ");
System.out.print("\n");
}
}
public static void main(String[] args) {
int input_matrix[][] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
System.out.println("The matrix is defined as ");
for (int i = 0; i < Rows; i++) {
for (int j = 0; j < Columns; j++)
System.out.print(input_matrix[i][j] + " ");
System.out.print("\n");
}
Rotate_matrix(Rows, Columns, input_matrix);
}
}
Đầu ra
The matrix is defined as 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 The matrix after one rotation: 5 1 2 3 9 10 6 4 13 11 7 8 14 15 16 12