Share 8 puzzle python code

### 8 câu đố trong Python

8 câu đố là một vấn đề kinh điển trong khoa học máy tính.Đó là một câu đố trong đó bạn có một lưới gạch 3x3, bị thiếu một gạch.Mục tiêu của câu đố là di chuyển các viên gạch xung quanh để chúng theo đúng thứ tự, với 1 gạch ở góc trên cùng bên trái.

8 câu đố có thể được giải quyết bằng nhiều thuật toán khác nhau.Một thuật toán phổ biến được gọi là ** Tìm kiếm đầu tiên ** Thuật toán.Thuật toán này hoạt động bằng cách bắt đầu ở trạng thái ban đầu của câu đố và khám phá tất cả các động tác có thể từ trạng thái đó.Nếu một trạng thái đạt đến nơi giải quyết câu đố, thì thuật toán chấm dứt.

Sau đây là việc triển khai thuật toán tìm kiếm đầu tiên trên Python:

`` `Python
def bfs (câu đố):
"" "
Giải quyết 8 câu đố bằng thuật toán tìm kiếm đầu tiên.

Thông số:
Câu đố: Danh sách 3x3 của các số nguyên đại diện cho trạng thái của câu đố.

Trả lại:
Một danh sách các danh sách đại diện cho chuỗi các động tác giải quyết câu đố.
"" "

# Tạo một hàng đợi để lưu trữ các trạng thái của câu đố mà chúng ta cần khám phá.
Hàng đợi = []

# Thêm trạng thái ban đầu của câu đố vào hàng đợi.
Hàng đợi.Append (Câu đố)

# Tạo một bộ để lưu trữ các trạng thái của câu đố mà chúng ta đã khám phá.
đã khám phá = set ()

# Trong khi vẫn còn các quốc gia trong hàng đợi:
Trong khi xếp hàng:
# Pop trạng thái tiếp theo từ hàng đợi.
trạng thái = hàng đợi.pop (0)

# Nếu trạng thái hiện tại là trạng thái mục tiêu, thì chúng tôi đã tìm ra giải pháp.
Nếu is_goal (trạng thái):
trả lại get_solution (trạng thái)

# Nếu không, thêm các hàng xóm của trạng thái hiện tại vào hàng đợi.
Đối với hàng xóm trong get_neighbors (trạng thái):
Nếu hàng xóm không được khám phá:
Hàng đợi.Append (hàng xóm)
đã khám phá.Add (hàng xóm)

# Nếu chúng ta đạt đến điểm này, thì không có giải pháp cho câu đố.
trở lại []

def is_goal (trạng thái):
"" "
Kiểm tra xem trạng thái nhất định của câu đố là trạng thái mục tiêu.

Thông số:
Trạng thái: Danh sách 3x3 của các số nguyên đại diện cho trạng thái của câu đố.

Trả lại:
Đúng nếu nhà nước là trạng thái mục tiêu, sai nếu không.
"" "

# Kiểm tra xem các số trong trạng thái có đúng thứ tự không.
Đối với tôi trong phạm vi (3):
Đối với J trong phạm vi (3):
Nếu trạng thái [j]! = (i * 3) + j + 1:
trả lại sai

# Trạng thái là trạng thái mục tiêu nếu tất cả các séc trên vượt qua.
trả về đúng

def get_neighbors (trạng thái):
"" "
Có được hàng xóm của trạng thái đã nhất định của câu đố.

Thông số:
Trạng thái: Danh sách 3x3 của các số nguyên đại diện cho trạng thái của câu đố.

Trả lại:
Một danh sách các danh sách 3x3 đại diện cho các hàng xóm của trạng thái đã cho.
"" "

# Nhận chỉ số của gạch trống trong tiểu bang.
trống_tile = get_empty_tile (trạng thái)

# Nhận các động tác có thể có thể được thực hiện từ gạch trống.
Có thể_moves = [(-1, 0), (1, 0), (0, -1), (0, 1)]]

# Nhận hàng xóm của nhà nước bằng cách di chuyển gạch trống theo từng cách có thể.
hàng xóm = []
Để di chuyển trong khả năng_move:
new_state = copy.deepcopy (state)
new_state [dlance_tile [0]] [clan
new_state [dlank_tile [0] + di chuyển [0
=======================================
### 8 Puzzle in Python

The 8 puzzle is a classic problem in computer science. It is a puzzle where you have a 3x3 grid of tiles, with one tile missing. The goal of the puzzle is to move the tiles around so that they are in the correct order, with the 1 tile in the top left corner.

The 8 puzzle can be solved using a variety of different algorithms. One common algorithm is called the **Breadth-First Search** algorithm. This algorithm works by starting at the initial state of the puzzle and exploring all possible moves from that state. If a state is reached where the puzzle is solved, then the algorithm terminates.

The following is an implementation of the Breadth-First Search algorithm in Python:

```python
def bfs(puzzle):
"""
Solves the 8 puzzle using the Breadth-First Search algorithm.

Parameters:
puzzle: A 3x3 list of integers representing the state of the puzzle.

Returns:
A list of lists representing the sequence of moves that solves the puzzle.
"""

# Create a queue to store the states of the puzzle that we need to explore.
queue = []

# Add the initial state of the puzzle to the queue.
queue.append(puzzle)

# Create a set to store the states of the puzzle that we have already explored.
explored = set()

# While there are still states in the queue:
while queue:
# Pop the next state from the queue.
state = queue.pop(0)

# If the current state is the goal state, then we have found a solution.
if is_goal(state):
return get_solution(state)

# Otherwise, add the neighbors of the current state to the queue.
for neighbor in get_neighbors(state):
if neighbor not in explored:
queue.append(neighbor)
explored.add(neighbor)

# If we reach this point, then there is no solution to the puzzle.
return []

def is_goal(state):
"""
Checks if the given state of the puzzle is the goal state.

Parameters:
state: A 3x3 list of integers representing the state of the puzzle.

Returns:
True if the state is the goal state, False otherwise.
"""

# Check if the numbers in the state are in the correct order.
for i in range(3):
for j in range(3):
if state[j] != (i * 3) + j + 1:
return False

# The state is the goal state if all of the checks above pass.
return True

def get_neighbors(state):
"""
Gets the neighbors of the given state of the puzzle.

Parameters:
state: A 3x3 list of integers representing the state of the puzzle.

Returns:
A list of 3x3 lists representing the neighbors of the given state.
"""

# Get the index of the empty tile in the state.
empty_tile = get_empty_tile(state)

# Get the possible moves that can be made from the empty tile.
possible_moves = [(-1, 0), (1, 0), (0, -1), (0, 1)]

# Get the neighbors of the state by moving the empty tile in each of the possible ways.
neighbors = []
for move in possible_moves:
new_state = copy.deepcopy(state)
new_state[empty_tile[0]][empty_tile[1]] = state[empty_tile[0] + move[0]][empty_tile[1] + move[1]]
new_state[empty_tile[0] + move[0
 
Join Telegram ToolsKiemTrieuDoGroup
Back
Top