III. Lập trình dựa vào ngăn xếp, hàng đợi
5.7. Bài toán tìm đường đi ngắn nhất
BÀI 5.7.1:
Hãy vẽ các đường đi ngắn nhất cho mỗi đỉnh của mô ̣t đồ thi ̣.
BÀI 5.7.2:
Tìm đường đi ngắn nhất trên đồ thị cho bởi hình dưới: a) Từ đỉnh 1 đến đỉnh 4 trong hình 1 b) Từ đỉnh A đến đỉnh H trong hình 2 c) Từ đỉnh B đến đỉnh F trong hình 2 Hình 1 Hình 2 BÀI 5.7.3:
Các thuâ ̣t toán tìm đường đi ngắn nhất đối với đồ thi ̣ vô hướng đã ho ̣c có đúng với đồ thi ̣ có hướng hay không? Giải thích ta ̣i sao và cho mô ̣t ví du ̣ nếu nó sai.
BÀI 5.7.4:
Cho mô ̣t bảng các số tự nhiên kích thước m x n. Từ mô ̣t ô có thể di chuyển sang mô ̣t ô kề ca ̣nh với nó. Hãy tìm mô ̣t cách đi từ ô (x,y) ra mô ̣t ô biên sao cho tổng các số ghi trên các ô đi qua là nhỏ nhất.
BÀI 5.7.5:
Cho mô ̣t dãy số nguyên A = (a1, a2, …, an). Hãy tìm mô ̣t dãy con gồm nhiều nhất các phần tử của dãy đã cho mà tổng của 2 phần tử liên tiếp là số nguyên tố.
1 2 3 5 6 4 5 3 7 5 2 8 10 7 6
156
BÀI 5.7.6:
Một công trình lớn được chia làm n công đoạn. Công đoạn i phải thực hiện mất thời gian ti. Quan hệ giữa các công đoạn được cho bởi bảng A trong đó A= {𝑎𝑖𝑗}
𝑛×𝑛 trong đó aij= 1 nếu công đoạn j chỉ được bắt đầu khi mà công đoạn i đã hoàn thành và aij = 0 trong trường hợp ngược lại. Mỗi công đoạn khi bắt đầu cần thực hiện liên tục cho tới khi hoàn thành, hai công đoạn độc lập nhau có thể tiến hành song song. Hãy bố trí lịch thực hiện các công đoạn sao cho thời gian hoàn thành cả công trình là sớm nhất, cho biết thời gian sớm nhất đó.
Gợi ý:
Dựng đồ thị có hướng G = (V,E), mỗi đỉnh tương ứng với một công đoạn, đỉnh u có cung nối tới đỉnh v nếu công đoạn u phải hoàn thành trước khi công đoạn v bắt đầu. Thêm vào G một đình s và cung nối từ s tới tất cả các đỉnh còn lại. Gán trọng số mỗi cung (u, v) của đồ thị bằng tv. Nếu đồ thị có chu trình, không thể có cách xếp lịch, nếu đồ thị không có chu trình (DAG) tìm đường đi dài nhất xuất phát từ s tới tất cả các đỉnh của đồ thị, khi đó nhãn khoảng cách d[v] chính là thời điểm hoàn thành công đoạn v, ta chỉ cần xếp lịch để công đoạn v được bắt đầu vào thời điểm d[v] - tv là xong.
BÀI 5.7.7: BIN LADEN
Trùm khủng bố Bin Laden trốn trong 1 căn hầm được đào sâu xuống mặt đất M tầng, mỗi tầng có N phòng. Các phòng được ngăn cách bằng các cửa rất khó phá. Các phòng có cửa xuống phòng ngay phía dưới và 2 phòng ở 2 bên. Từ trên mặt đất có N cửa xuống N phòng tầng -1. Bin Laden ở tầng dưới cùng (tầng -M) phòng thứ N (phòng ở bên phải nhất). Mỗi cửa được làm bằng một kim loại khác nhau với độ dày khác nhau nên việc phá cửa cần thời gian khác nhau.
Bạn hãy tìm cách đi từ mặt đất xuống phòng của Bin Laden nhanh nhất không hắn thoát mất.
Dữ liệu:
Dòng 1 ghi M và N
Dòng 2 đến 2M + 1, dòng chẵn ghi N số, dòng lẻ ghi N - 1 số là chi phí để phá cửa.
157
Ghi ra 1 số là thời gian nhỏ nhất để đến được phòng của Bin Laden
Ví dụ Dữ liệu 4 2 99 10 1 10 99 1 99 10 1 10 99 1 Kết quả 44 +--99--+--10--+ | | | | 1 | | | | +--10--+--99--+ | | | | 1 | | | | +--99--+--10--+ | | | | 1 | | | | +--10--+--99--+
158
| | | | 1 | | | | +---+---+ Đi theo đường zigzac
Giới hạn
1 <= M <= 2222 1 <= N <= 10
Chi phí của các cánh cửa thuộc [0, 1000].