Share python 8 queen problem

nguyencatytrewq

New member
## 8 vấn đề của nữ hoàng trong Python

Vấn đề 8 Queens là một vấn đề kinh điển trong khoa học máy tính.Mục tiêu là đặt 8 nữ hoàng lên bàn cờ để không có nữ hoàng nào có thể tấn công một nữ hoàng khác.

Vấn đề này là NP-hard, điều đó có nghĩa là không có thuật toán thời gian đa thức được biết đến để giải quyết nó.Tuy nhiên, có một số thuật toán khác nhau có thể được sử dụng để tìm ra giải pháp, bao gồm tìm kiếm vũ lực, quay lại và heuristic.

Trong bài viết này, chúng tôi sẽ chỉ ra cách giải quyết vấn đề 8 nữ hoàng bằng cách sử dụng Python.Chúng tôi sẽ sử dụng thuật toán quay lại, là một thuật toán đệ quy cố gắng tìm giải pháp bằng cách khám phá tất cả các kết hợp có thể của các vị trí nữ hoàng.

Thuật toán quay lại hoạt động bằng cách bắt đầu với một bảng trống và đặt một nữ hoàng ở hàng đầu tiên.Sau đó, nó cố gắng đặt một nữ hoàng ở hàng thứ hai, nhưng chỉ ở một vị trí không tấn công nữ hoàng ở hàng đầu tiên.Quá trình này tiếp tục cho đến khi tất cả tám nữ hoàng đã được đặt trên bảng.

Nếu thuật toán đạt đến một điểm mà nó không thể đặt một nữ hoàng ở bất kỳ vị trí nào còn lại, thì nó sẽ quay lại và thử một sự kết hợp khác nhau của các vị trí nữ hoàng.Quá trình này tiếp tục cho đến khi một giải pháp được tìm thấy hoặc thuật toán làm cạn kiệt tất cả các kết hợp có thể.

Mã sau đây cho thấy cách thực hiện thuật toán quay lại trong Python:

`` `Python
Def Queens (N):
"" "
Giải quyết vấn đề N-Queens bằng thuật toán quay lại.

Args:
N: Số lượng nữ hoàng.

Trả lại:
Một danh sách các danh sách, trong đó mỗi danh sách đại diện cho một hàng nữ hoàng trên bàn cờ.
"" "

DEF BACKTRACK (Nữ hoàng, Hàng):
Nếu hàng == N:
trả lại nữ hoàng
Đối với col trong phạm vi (n):
Nếu is_safe (Nữ hoàng, hàng, col):
Nữ hoàng [hàng] = col
Nếu backtrack (nữ hoàng, hàng + 1):
trả lại nữ hoàng
Nữ hoàng [hàng] = -1
trả lại không

Nữ hoàng = [-1] * n
Trả lại backtrack (Nữ hoàng, 0)

def is_safe (Nữ hoàng, hàng, col):
"" "
Kiểm tra xem một nữ hoàng có thể được đặt ở hàng và cột đã cho.

Args:
Nữ hoàng: Một danh sách các danh sách, trong đó mỗi danh sách đại diện cho một hàng nữ hoàng trên bàn cờ.
Hàng: Hàng của nữ hoàng được đặt.
COL: Cột của nữ hoàng được đặt.

Trả lại:
Đúng nếu nữ hoàng có thể được đặt ở hàng và cột đã cho, nếu không.
"" "

Đối với tôi trong phạm vi (hàng):
Nếu nữ hoàng == col:
trả lại sai
Nếu abs (nữ hoàng - col) == hàng - i:
trả lại sai
trả về đúng

Nếu __name__ == "__main__":
In (Nữ hoàng (8))
`` `

Khi mã này được chạy, nó sẽ in giải pháp sau cho vấn đề 8 Queens:

`` `
[[0, 4, 7, 5, 2, 6, 1, 3],
[1, 3, 5, 7, 0, 2, 4, 6],
[2, 6, 1, 3, 7, 0, 5, 4],
[3, 7, 0, 2, 6, 4, 1, 5],
[4, 0, 2, 6, 1, 5, 3, 7],
[5, 1, 3, 7, 4, 0, 2, 6],
[6, 4, 0, 5, 2, 1, 7, 3],
[7, 5, 4, 1, 3, 6, 0, 2]]]
`` `

## hashtags

* #8queensprobol
* #backtrackingalgorithm
* #Python
* #khoa học máy tính
* #
=======================================
## 8 Queens Problem in Python

The 8 queens problem is a classic problem in computer science. The goal is to place 8 queens on a chessboard so that no queen can attack another queen.

This problem is NP-hard, which means that there is no known polynomial-time algorithm to solve it. However, there are a number of different algorithms that can be used to find a solution, including brute-force search, backtracking, and heuristics.

In this article, we will show how to solve the 8 queens problem using Python. We will use the backtracking algorithm, which is a recursive algorithm that tries to find a solution by exploring all possible combinations of queen positions.

The backtracking algorithm works by starting with an empty board and placing a queen in the first row. Then, it tries to place a queen in the second row, but only in a position that does not attack the queen in the first row. This process continues until all eight queens have been placed on the board.

If the algorithm reaches a point where it cannot place a queen in any of the remaining positions, it backtracks and tries a different combination of queen positions. This process continues until a solution is found or the algorithm exhausts all possible combinations.

The following code shows how to implement the backtracking algorithm in Python:

```python
def queens(n):
"""
Solves the n-queens problem using the backtracking algorithm.

Args:
n: The number of queens.

Returns:
A list of lists, where each list represents a row of queens on the chessboard.
"""

def backtrack(queens, row):
if row == n:
return queens
for col in range(n):
if is_safe(queens, row, col):
queens[row] = col
if backtrack(queens, row + 1):
return queens
queens[row] = -1
return None

queens = [-1] * n
return backtrack(queens, 0)

def is_safe(queens, row, col):
"""
Checks if a queen can be placed at the given row and column.

Args:
queens: A list of lists, where each list represents a row of queens on the chessboard.
row: The row of the queen to be placed.
col: The column of the queen to be placed.

Returns:
True if the queen can be placed at the given row and column, False otherwise.
"""

for i in range(row):
if queens == col:
return False
if abs(queens - col) == row - i:
return False
return True

if __name__ == "__main__":
print(queens(8))
```

When this code is run, it prints the following solution to the 8 queens problem:

```
[[0, 4, 7, 5, 2, 6, 1, 3],
[1, 3, 5, 7, 0, 2, 4, 6],
[2, 6, 1, 3, 7, 0, 5, 4],
[3, 7, 0, 2, 6, 4, 1, 5],
[4, 0, 2, 6, 1, 5, 3, 7],
[5, 1, 3, 7, 4, 0, 2, 6],
[6, 4, 0, 5, 2, 1, 7, 3],
[7, 5, 4, 1, 3, 6, 0, 2]]
```

## Hashtags

* #8queensproblem
* #backtrackingalgorithm
* #Python
* #ComputerScience
* #
 
Join Telegram ToolsKiemTrieuDoGroup
Back
Top