Share 8 puzzle problem using bfs in python

nguyennhumarie

New member
#8 Vấn đề câu đố #BFS #Python #algorithms #data Cấu trúc

## 8 vấn đề câu đố

8 vấn đề 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 và mỗi ô có một số từ 1 đến 8. Mục tiêu của câu đố là sắp xếp lại các gạch để chúng theo thứ tự số, từ 1 đến 8, với 1 ingóc trên bên trái và 8 ở góc dưới bên phải.

Vấn đề 8 câu đố là vấn đề ** 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 hiệu quả có thể được sử dụng để tìm giải pháp, một trong số đó là ** Tìm kiếm đầu tiên ** (BFS).

## Tìm kiếm đầu tiên

Tìm kiếm đầu tiên là một thuật toán truyền tải đồ thị ** bắt đầu tại một nút đã cho và khám phá tất cả các nút liền kề với nó.Sau đó, nó khám phá tất cả các nút liền kề với các nút đó, v.v.Quá trình này tiếp tục cho đến khi tất cả các nút trong biểu đồ đã được truy cập.

Tìm kiếm đầu tiên có thể được sử dụng để giải quyết 8 vấn đề câu đố 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 trạng thái có thể đạt được bằng cách thực hiện một động tác.Khi tất cả các quốc gia có thể được khám phá, thuật toán sẽ trả lại trạng thái là trạng thái mục tiêu của câu đố.

## Thực hiện trong Python

Mã sau đây cho thấy cách thực hiện tìm kiếm đầu tiên trên Python để giải quyết 8 vấn đề câu đố:

`` `Python
từ bộ sưu tập nhập khẩu deque

def bfs (start_state):
"" "
Giải quyết 8 vấn đề câu đố bằng cách sử dụng tìm kiếm đầu tiên.

Thông số:
Start_State: Trạng thái ban đầu của câu đố.

Trả lại:
Trạng thái mục tiêu của câu đố.
"" "

# Tạo một hàng đợi để lưu trữ các trạng thái cần được khám phá.
Hàng đợi = deque ([start_state])

# Tạo một bộ để lưu trữ các trạng thái đã được truy cập.
Đã truy cập = 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.
state = hàng đợi.popleft ()

# Nếu trạng thái hiện tại là trạng thái mục tiêu, hãy trả lại nó.
Nếu is_goal_state (trạng thái):
Trở lại trạng thái

# Nếu không, hãy thêm trạng thái hiện tại vào tập hợp các trạng thái đã truy cập.
Đã truy cập.ADD (Bang)

# Tạo tất cả các trạng thái có thể đạt được bằng cách thực hiện một động tác.
Đối với new_state trong Generate_successors (trạng thái):
# Nếu trạng thái mới chưa được truy cập, hãy thêm nó vào hàng đợi.
Nếu new_state không được truy cập:
Hàng đợi.Append (new_state)

def is_goal_state (trạng thái):
"" "
Kiểm tra xem trạng thái đã cho là trạng thái mục tiêu của câu đố.

Thông số:
Tiểu bang: Nhà nước kiểm tra.

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

# Trạng thái mục tiêu là trạng thái mà các viên gạch theo thứ tự số,
# Từ 1 đến 8, với 1 ở góc trên cùng bên trái và 8 ở góc dưới bên phải.

Trạng thái trả lại == [1, 2, 3, 4, 5, 6, 7, 8]

def Generate_successors (trạng thái):
"" "
Tạo ra tất cả các trạng thái có thể đạt được bằng cách thực hiện một động tác.

Thông số:
Nhà nước: Trạng thái hiện tại.

Trả lại:
Một danh sách tất cả các quốc gia kế thừa có thể.
"" "

# Các động tác có thể lên, xuống, trái và phải.

di chuyển = [(-1, 0), (1, 0), (0, -1), (0, 1
=======================================
#8 Puzzle Problem #BFS #Python #algorithms #data Structures

## 8 Puzzle Problem

The 8 puzzle problem is a classic problem in computer science. It is a puzzle where you have a 3x3 grid of tiles, and each tile has a number from 1 to 8. The goal of the puzzle is to rearrange the tiles so that they are in numerical order, from 1 to 8, with 1 in the top left corner and 8 in the bottom right corner.

The 8 puzzle problem is a **NP-hard** problem, which means that there is no known polynomial-time algorithm to solve it. However, there are a number of efficient algorithms that can be used to find a solution, one of which is **breadth-first search** (BFS).

## Breadth-first search

Breadth-first search is a **graph traversal** algorithm that starts at a given node and explores all of the nodes that are adjacent to it. It then explores all of the nodes that are adjacent to those nodes, and so on. This process continues until all of the nodes in the graph have been visited.

Breadth-first search can be used to solve the 8 puzzle problem by starting at the initial state of the puzzle and exploring all of the possible states that can be reached by making one move. Once all of the possible states have been explored, the algorithm will return the state that is the goal state of the puzzle.

## Implementation in Python

The following code shows how to implement breadth-first search in Python to solve the 8 puzzle problem:

```python
from collections import deque

def bfs(start_state):
"""
Solves the 8 puzzle problem using breadth-first search.

Parameters:
start_state: The initial state of the puzzle.

Returns:
The goal state of the puzzle.
"""

# Create a queue to store the states that need to be explored.
queue = deque([start_state])

# Create a set to store the states that have already been visited.
visited = set()

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

# If the current state is the goal state, return it.
if is_goal_state(state):
return state

# Otherwise, add the current state to the set of visited states.
visited.add(state)

# Generate all of the possible states that can be reached by making one move.
for new_state in generate_successors(state):
# If the new state has not already been visited, add it to the queue.
if new_state not in visited:
queue.append(new_state)

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

Parameters:
state: The state to check.

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

# The goal state is the state where the tiles are in numerical order,
# from 1 to 8, with 1 in the top left corner and 8 in the bottom right corner.

return state == [1, 2, 3, 4, 5, 6, 7, 8]

def generate_successors(state):
"""
Generates all of the possible states that can be reached by making one move.

Parameters:
state: The current state.

Returns:
A list of all of the possible successor states.
"""

# The possible moves are up, down, left, and right.

moves = [(-1, 0), (1, 0), (0, -1), (0, 1
 
Join Telegram ToolsKiemTrieuDoGroup
Back
Top