Câu hỏi:
04/10/2024 25Một đồ thị được gọi là liên thông nếu tồn tại ít nhất một đường đi giữa hai đỉnh bất kì của nó. Chẳng hạn, đồ thị ở Hình 6a là liên thông còn đô thị ở Hình 6b là không liên thông (không có đường đi từ đỉnh 0 tới đỉnh 3).
Yêu cầu: Áp dụng thuật toán duyệt đồ thị theo chiều sâu. Thực hiện xây dựng thuật toán kiểm tra xem đồ thị G = (V, E) cho trước có liên thông hay không.
Sách mới 2k7: 30 đề đánh giá năng lực DHQG Hà Nội, Tp. Hồ Chí Minh, BKHN 2025 mới nhất (600 trang - chỉ từ 160k).
Quảng cáo
Trả lời:
Áp dụng thuật toán duyệt đồ thị theo chiều sâu. Thực hiện xây dựng thuật toán kiểm tra xem đồ thị G = (V, E) cho trước có liên thông hay không.
def dft(graph, u): stack initStack()
#Khởi tạo stack rỗng
visited [vertices.index(u)] = True #Đánh dấu đỉnh u đã duyệt
print(u, end = " ")
push(stack, u)
#In đỉnh u
#Thêm đỉnh u vào stack
while not isEmptyStack(stack): #Lặp khi stack khác rỗng
p = top(stack)
found = False
for v in graph[p]:
#Xem đỉnh p ở đỉnh stack
#Chưa tìm thấy
#Lặp để lấy các đỉnh kề v của đỉnh p
if not visited[vertices.index(v)]: #Nếu đỉnh v chưa duyệt
found = True
break
if not found:
p = pop(stack)
else:
#Tìm thấy
#Không tìm thấy đỉnh v
#Lấy đỉnh p ra khỏi stack
#Tìm thấy đỉnh v chưa duyệt
visited[vertices.index(v)] = True #Đánh dấu đỉnh v đã duyệt
print(v, end = "")
push(stack, v)
#In đỉnh v
#Thêm đỉnh v vào stack
#Hàm duyệt graph dạng danh sách kế theo chiều sâu
def dfs(graph):
global visited
visited [False]
*
len(graph)
for u in graph:
if not visited [vertices.index(u)]:
dft(graph, u)
#Đánh dấu các đỉnh chưa duyệt
#Xét đỉnh u chưa duyệt
#Duyệt đô thị theo chiều sâu từ u
graph, vertices = createAdjListGraph('dothi.txt') #Tạo đô thị từ tập dfs(graph)
#In kết quả duyệt theo chiều sâu
CÂU HỎI HOT CÙNG CHỦ ĐỀ
Câu 1:
Cho đồ thị G1 như ở Hình 1. Hãy tìm đường đi ngắn nhất từ đỉnh H đến đỉnh D bằng thuật toán duyệt đồ thị theo chiều rộng.
Câu 2:
Nhiệm vu: Duyệt đồ thị theo chiều sâu
Yêu cầu: Chương trình sau được viết bằng Phython duyệt đồ thị theo chiều sâu, với đồ thị Graph được biểu diễn bằng danh sách kề.
Câu 3:
Cho đồ thị G5 (Hình 5). Chỉ ra đường đi từ đỉnh F đến đỉnh J bằng thuật toán duyệt đồ thị theo chiều sâu trong đồ thị G5.
Câu 4:
Em hãy minh hoạ duyệt theo chiều sâu của đồ thị G2 ở Hình 2 (tương tự như Bảng 1) và bắt đầu từ đỉnh 2.
Câu 5:
Dùng thuật toán duyệt đồ thị theo chiều sâu xuất phát từ đỉnh 1. Hãy cho biết thứ tự duyệt các đỉnh của đồ thị ở Hình 4.
Gọi 084 283 45 85
Hỗ trợ đăng ký khóa học tại Vietjack
về câu hỏi!