Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Chương trình Java xoay phần tử ma trận

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

  1. Bắt đầu
  2. Khai báo: ma trận input_matrix, 4 số nguyên row, column, previous, next
  3. Khởi tạo giá trị
  4. 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ặp for, lưu ma trận
  5. Hiển thị kết quả
  6. 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