Bài toán 2.20. Cho đồ thị dưới đây, tìm đường đi ngắn nhất từ A đến các đỉnh còn lại
Hình 2.13
Sau đây ta sẽ minh họa các bước thực hiện qua bảng sau:
Bước A B C D E 0 0 ∞ ∞ ∞ ∞ 1 . 10 (A) ∞ ∞ 5 (A) 2 . 8(E) 14 (E) 7 (E) . 3 . 8 (E) 13 (D) . . 4 . . 9 (B) . . 5 . . . 13 (C) .
nào cả nên giá trị tại A là 0 và các đỉnh còn lại sẽ là vô cùng.
• Bước 1: Xuất phát, ta thấy đỉnh A chỉ có đường đii đến 2 đỉnh B và E. Xét về trọng số, (A, B) = 10, còn (A, E) = 5. Ta viết 2 trọng số này vào bảng, các đỉnh còn lại không có đường đi đến thì vẫn giữ nguyên giá trị. Đánh dấu đỉnh A đã thăm.
Chú ý: từ bước này ta sẽ chọn ra đỉnh tiếp theo để thực hiện bước 2, đỉnh tiếp theo là đỉnh có giá trị trọng số nhỏ nhất ở từng bước, ví dụ ở đây ta phải xét đỉnh E (vì E chỉ có giá trị 5 (A) ) (ký hiệu 5 (A) tức là đỉnh A đến E có giá trị trọng số là 5).
• Bước 2: Xét đỉnhE, E có 3 đường đi đến các đỉnh B, C, Dlần lượt có giá trị trọng số là 3, 9, 7. Đem cộng với 5 (A). So sánh ba giá trị này, chọn giá trị nhỏ nhất. Ở đây là giá trị 7 (E), tức bước tiếp theo ta xét từ đỉnh D. Đánh dấu đỉnh E đã thăm.
• Bước 3: Từ đỉnh D, thực hiện tương tự bước 2 ta được D→C = 13(D), D→A= 7(D). Nhưng ở A giá trị ban đầu là 0 rồi, ta không cần cập nhật lại. Do vậy bước này chỉ có duy nhất nhất một giá trị mới sinh ra, nhưng ta không chọn giá trị này vì tại bước 2, đỉnh B có 8 (E) < 13 (D). Nên ta chọn đỉnh B để thực hiện tiếp bước 4. Chưa đánh dấu đã thăm đỉnh D.
• Bước 4: Tương tự, ta được B →C = 9(B). Đánh dấu đã thăm đỉnh B.
• Bước 5: Cuối cùng từ C đếnD chỉ có một đường duy nhất C →D= 13(C). Ta kết thúc thuật toán vì tất cả các đỉnh đã được thăm.
Kết luận: Như vậy ta tìm được con đường ngắn nhất đi từ A đến tất cả các đỉnh còn lại là: A→E →D→B →C.
Ngoài ra, nhờ vào thuật toán Dijkstra ta có thể tính được khoảng cách ngắn nhất từ 2 đỉnh bất kỳ trong đồ thị. Trong trường hợp số đỉnh lớn dẫn đến việc thực hiện bằng tay sẽ trở nên khó khăn. Cho nên việc lập trình lại thuật toán và sử dụng phần mềm để giải là nhanh chóng và thuận tiện hơn.
Sau đây ta sẽ dùng phần mềm Matlab để thực hiện lại thuật toán tìm đường đi ngắn nhất giữa hai đỉnh bất kỳ.
Ta quay lại với Bài toán 3.4 và chuyển sang ngôn ngữ Matlab: Từ đồ thị có hướng trên hình vẽ ta nhập ma trận kề
G= [0 0 0 7 0; 10 0 0 0 3; 0 1 0 6 9; 0 0 4 0 2; 5 2 0 0 0];
Nhập đỉnh xuất phát: 1 Nhập đỉnh kết thúc: 3 Hình minh họa (Hình 3.2)
Vậy đường đi ngắn nhất từ A tới E là qua B rồi qua C. Tổng chi phí bằng 9. Việc sử dụng phần mềm Matlab để tính toán sẽ rất thuận tiện khi chúng ta phải giải bài toán với số đỉnh nhập vào là lớn.
Hình 2.14