btvn.vn
Tìm kiếm Đăng nhập

Thực hành tìm đường và dựng lại tuyến đi

Lưu trên thiết bị này
Chuyên đề lựa chọn CS: Duyệt đồ thị · Chọn bài khác

prev là đỉnh phát hiện, không phải đỉnh đứng ngay trước trong order

Trong BFS mẫu, prev[5]=3, prev[3]=1, prev[1]=0. Lần ngược từ 5 nhận [5,3,1,0]; đảo lại được [0,1,3,5]. Mỗi cặp liên tiếp phải có cạnh nối đúng chiều. Không lấy đoạn của danh sách order làm đường đi: order chỉ là thứ tự xử lí, hai đỉnh liên tiếp trong đó chưa chắc kề nhau. Nguồn s có prev[s]=None nhưng vẫn tới được chính nó với khoảng cách 0; vì vậy dùng dist hoặc seen để xét có đường, không chỉ kiểm prev[t].

Trả danh sách đỉnh của một đường ít cạnh nhất

shortest_path trả [] khi không tới được; nếu s=t, trả [s]. path_by_name là phần vận dụng nhập tên; giả định names có đúng một tên riêng cho mỗi đỉnh và thứ tự khớp chỉ số. ```python def shortest_path(Adj, s, t): check_vertex(Adj, s) check_vertex(Adj, t) order, dist, prev = bfs(Adj, s) if dist[t] == -1: return [] path = [t] while path[-1] != s: path.append(prev[path[-1]]) path.reverse() return path def path_by_name(Adj, names, start, finish): if start not in names or finish not in names: raise ValueError("Tên không có trong danh sách") return shortest_path(Adj, names.index(start), names.index(finish)) ```

Chạy xe_dap.py bằng dữ liệu giả định

Trong bộ mẫu, ten_nha.inp có bảy nhãn Nhà mẫu A,…,Nhà mẫu G, theo chỉ số 0,…,6. canh.inp mô tả các tuyến hai chiều được phép đi xe đạp. Đây chỉ là mô hình học thuật, không là chỉ dẫn giao thông thật. Chạy xe_dap.py; nhập `0 5` để nhận **Nhà mẫu A → Nhà mẫu B → Nhà mẫu D → Nhà mẫu F**, số cạnh 3. Nhập `0 6` phải báo không có đường. Nhập `2 2` phải cho Nhà mẫu C, số cạnh 0. Chương trình nhận cả s>t, chẳng hạn `5 0`; nhập q để thoát. Chỉ số ngoài 0,…,6 hoặc thiếu hai số được báo không hợp lệ. Nếu cần tra bằng tên trong mã, gọi path_by_name(Adj,names,'Nhà mẫu A','Nhà mẫu F'). Kiểm tên có trong danh sách trước khi tìm chỉ số để tránh nhầm tên không tồn tại. Thay đổi thứ tự kề có thể chọn một đường ít cạnh nhất khác nếu có nhiều đường cùng độ dài.

Bài luyện

Vì sao prev[s]=None không có nghĩa không tồn tại đường từ s đến s?
Chọn một đáp án

Bài luyện

prev[5]=3, prev[3]=1, prev[1]=0, nguồn 0. Đường dựng lại là gì?
Chọn một đáp án

Bài luyện

shortest_path mẫu từ 0 đến 6 trả gì?
Chọn một đáp án

Đang học