Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 5

1.

Tìm kiếm theo chiều rộng (BFS)

Thuật toán:

Khởi tạo một hàng đợi rỗng Q và đánh dấu tất cả các đỉnh là chưa được thăm.
Thêm đỉnh bắt đầu vào hàng đợi Q.
Lặp lại cho đến khi hàng đợi Q rỗng:
Lấy đỉnh đầu tiên u ra khỏi hàng đợi Q.
Đánh dấu đỉnh u là đã được thăm.
Duyệt qua tất cả các đỉnh v kề với u:
Nếu v chưa được thăm, thêm v vào hàng đợi Q.
Ví dụ:

Giả sử ta có đồ thị sau:

1 -- 2 -- 3
|\/|
4 -- 5
Với đỉnh bắt đầu là 1, thuật toán BFS sẽ duyệt các đỉnh theo thứ tự: 1, 2, 3, 4, 5.
Thực hiện Python:

2. Tìm kiếm theo chiều sâu (DFS)

Thuật toán:

Khởi tạo một ngăn xếp rỗng S và đánh dấu tất cả các đỉnh là chưa được thăm.
Thêm đỉnh bắt đầu vào ngăn xếp S.
Lặp lại cho đến khi ngăn xếp S rỗng:
Lấy đỉnh đầu tiên u ra khỏi ngăn xếp S.
Đánh dấu đỉnh u là đã được thăm.
Duyệt qua tất cả các đỉnh v kề với u:
Nếu v chưa được thăm, thêm v vào ngăn xếp S.
Ví dụ:

Với cùng đồ thị trên và đỉnh bắt đầu là 1, thuật toán DFS sẽ duyệt các đỉnh theo thứ tự: 1,
2, 5, 3, 4.
Thực hiện Python:

Thuật toán A*
Hàm heuristic:

f(n): Ước lượng chi phí của đường đi từ đỉnh n đến đích.
g(n): Chi phí thực tế của đường đi từ đỉnh bắt đầu đến đỉnh n.
h(n): Ước lượng chi phí của đường đi từ đỉnh n đến đích.
Thuật toán A:*

Khởi tạo hai tập hợp open và closed.


Thêm đỉnh bắt đầu vào tập hợp open.
Lặp lại cho đến khi tập hợp open rỗng:
Lấy đỉnh u có giá trị f(u) nhỏ nhất trong tập hợp open.
Di chuyển u từ tập hợp open sang tập hợp closed.
Nếu u là đỉnh đích, dừng thuật toán.
Duyệt qua tất cả các đỉnh v kề với u:
Nếu v không thuộc tập hợp closed:
Tính toán g(v) và h(v).
Tính toán f(v) = g(v) + h(v).
Thêm v vào tập hợp open nếu chưa có.
Ví dụ:

Giả sử ta có đồ thị sau:

A -- 1 -- B
|\/|
C -- 2 -- D
Với đỉnh bắt đầu là A và đỉnh đích là D, sử dụng hàm heuristic h(n) là khoảng cách
Manhattan, thuật toán A* sẽ tìm ra đường đi ngắn nhất là A-C-D.

Thực hiện Python:

You might also like