Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
1.9 kB
1
Indexable
Never
Bài toán N quân hậu là một bài toán kinh điển trong lập trình. Đây là một ví dụ về cách giải quyết bài toán này bằng cách sử dụng Java và thuật toán quay lui (backtracking):

```java
public class NQueens {
    private static int N;
    private static int[] board;
    private static int solutions = 0;

    public static void main(String[] args) {
        N = 8; // Số lượng quân hậu và kích thước bàn cờ
        board = new int[N];
        placeQueenOnBoard(0);
        System.out.println("Số lượng giải pháp: " + solutions);
    }

    private static void placeQueenOnBoard(int Qi) {
        if (Qi == N) {
            solutions++;
        } else {
            for (int column = 0; column < N; column++) {
                if (isSafePlace(column, Qi)) {
                    board[Qi] = column;
                    placeQueenOnBoard(Qi + 1);
                }
            }
        }
    }

    private static boolean isSafePlace(int column, int Qi) {
        for (int i = 0; i < Qi; i++) {
            if (board[i] == column) {
                return false;
            } else if (Math.abs(board[i] - column) == Math.abs(i - Qi)) {
                return false;
            }
        }
        return true;
    }
}
```

Trong đó `N` là số lượng quân hậu và kích thước bàn cờ, `board` là mảng một chiều để lưu trữ vị trí của các quân hậu trên bàn cờ, `solutions` là biến đếm số lượng giải pháp. Hàm `placeQueenOnBoard` sử dụng thuật toán quay lui để đặt các quân hậu trên bàn cờ sao cho chúng không đe dọa nhau. Hàm `isSafePlace` kiểm tra xem có thể đặt quân hậu tại vị trí hiện tại hay không.

Bạn có thể tham khảo đoạn code trên và điều chỉnh theo yêu cầu của bạn. 😊