Câu hỏi:
11/07/2024 362
Viết chương trình in ra thứ tự các đỉnh đã được duyệt bằng thuật toán DFS theo cả hai cách đệ quy và không đệ quy, áp dụng cho đồ thị có hướng Hình 14.1b trong phần Khởi động.
Viết chương trình in ra thứ tự các đỉnh đã được duyệt bằng thuật toán DFS theo cả hai cách đệ quy và không đệ quy, áp dụng cho đồ thị có hướng Hình 14.1b trong phần Khởi động.
Quảng cáo
Trả lời:
Chương trình Python mô phỏng thuật toán DFS theo cả hai cách đệ quy và không đệ quy:
* Đệ quy (Recursive):
def DFS_recursive(graph, vertex, visited=None):
if visited is None:
visited = set()
visited.add(vertex)
print(vertex, end=' ')
for neighbor in graph[vertex]:
if neighbor not in visited:
DFS_recursive(graph, neighbor, visited)
# Ví dụ sử dụng:
graph = {
0: [1, 2],
1: [3],
2: [4],
3: [],
4: [5],
5: [3],
6: [5],
7: [6]
}
DFS_recursive(graph, 0)
* Không đệ quy (Non-recursive):
def DFS_non_recursive(graph, start_vertex):
visited = set()
stack = [start_vertex]
while stack:
vertex = stack.pop()
if vertex not in visited:
print(vertex, end=' ')
visited.add(vertex)
# Thêm vào ngăn xếp các đỉnh kề chưa được thăm
stack.extend([neighbor for neighbor in graph[vertex] if neighbor not in visited])
# Ví dụ sử dụng:
graph = {
0: [1, 2],
1: [3],
2: [4],
3: [],
4: [5],
5: [3],
6: [5],
7: [6]
}
DFS_non_recursive(graph, 0)
Hot: 500+ Đề thi thử tốt nghiệp THPT các môn, ĐGNL các trường ĐH... file word có đáp án (2025). Tải ngay
CÂU HỎI HOT CÙNG CHỦ ĐỀ
Lời giải
Ý tưởng chính của DFS:
DFS hoạt động bằng cách bắt đầu từ một đỉnh nguồn, đánh dấu nó là đã thăm, sau đó tiếp tục đi sâu vào các đỉnh kề chưa thăm cho đến khi không thể đi tiếp được nữa. Khi không thể đi tiếp, thuật toán quay lui về các đỉnh trước đó để tiếp tục tìm kiếm các đường đi mới.
Lời giải
Để cài đặt thuật toán duyệt theo chiều sâu (DFS) mà không sử dụng đệ quy, chúng ta có thể sử dụng ngăn xếp (stack) để theo dõi các đỉnh và thực hiện duyệt. Dưới đây là một số cách cài đặt DFS không sử dụng đệ quy:
1. Sử dụng ngăn xếp (Stack):
- Bắt đầu bằng việc đưa một đỉnh bất kỳ vào ngăn xếp.
- Lặp qua các bước sau cho đến khi ngăn xếp trống:
a) Lấy đỉnh trên cùng của ngăn xếp (top value).
b) Đánh dấu đỉnh này là đã thăm (thêm vào danh sách visited).
c) Thêm tất cả các đỉnh kề của đỉnh đang xét vào ngăn xếp, nếu chưa được thăm.
d) Lặp lại bước a) cho đến khi không còn đỉnh kề nào để thêm vào ngăn xếp.
2. Sử dụng hàng đợi (Queue):
- Tương tự như cách sử dụng ngăn xếp, nhưng thay vì ngăn xếp, chúng ta sử dụng hàng đợi.
- Bắt đầu bằng việc đưa một đỉnh bất kỳ vào hàng đợi.
- Lặp qua các bước sau cho đến khi hàng đợi trống:
a) Lấy đỉnh đầu tiên của hàng đợi.
b) Đánh dấu đỉnh này là đã thăm.
c) Thêm tất cả các đỉnh kề của đỉnh đang xét vào hàng đợi, nếu chưa được thăm.
d) Lặp lại bước a) cho đến khi không còn đỉnh kề nào để thêm vào hàng đợi.
3. Sử dụng danh sách liên kết (Linked List):
- Thay vì sử dụng ngăn xếp hoặc hàng đợi, chúng ta có thể sử dụng danh sách liên kết để lưu trữ các đỉnh.
- Bắt đầu bằng việc đưa một đỉnh bất kỳ vào danh sách liên kết.
- Lặp qua các bước sau cho đến khi danh sách liên kết trống:
a) Lấy đỉnh đầu tiên của danh sách liên kết.
b) Đánh dấu đỉnh này là đã thăm.
c) Thêm tất cả các đỉnh kề của đỉnh đang xét vào danh sách liên kết
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 199K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 199K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 199K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 199K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.