340 likes | 693 Views
Tìm đường đi ngắn nhất giữa hai đỉnh của đồ thị. Thuật toán Dijktra. Tìm đường đi ngắn nhất. Trong đồ thị không trọng số Tìm đường đi qua từ đỉnh i đến đỉnh j sao cho phải đi qua ít đỉnh trung gian nhất. 2. 2. 1. 1. 4. 4. 6. 3. 3. 5. 5. Tìm đường đi ngắn nhất.
E N D
Tìm đường đi ngắn nhất giữa hai đỉnh của đồ thị Thuật toán Dijktra
Tìm đường đi ngắn nhất • Trong đồ thị không trọng số Tìm đường đi qua từ đỉnh i đến đỉnh j sao cho phải đi qua ít đỉnh trung gian nhất 2 2 1 1 4 4 6 3 3 5 5
Tìm đường đi ngắn nhất • Tìm đường đi ngắn nhất giữa hai đỉnh trong đồ thị không trọng số Dùng thuật loang theo chiều rộng (BFS)
Tìm đường đi ngắn nhất • Trong đồ thị có trọng số trên mỗi cạnh Tìm đường đi ngắn nhất từ đỉnh i đến j Tìm đường đi sao cho tổng trọng số trên các cạnh thuộc đường đi là bé nhất 2 1 15 5 1 6 4 3 1 2 1 3 5 1
Tìm đường đi ngắn nhất • Trong đồ thị có trọng số : • Thuật giải vét cạn • Thuật toán Dijktra
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Tìm một đường đi từ đỉnh i đến đỉnh j • Nếu độ dài của đường đi vừa tìm được nhỏ hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Tiếp tục thực hiện bước đầu tiên đến khi không còn đường đi nào khác từ i đến j
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Đệ quy • Dùng mảng stack để khử đệ quy
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Đồ thị không có chu trình có trọng số âm t4 b c t5 t3 i a j t2 t1 Đường đi : i – a – c – b – a – j Độ dài : t1 + t3 + t4 + t5 + t2 t1 + t3 + t4 + t5 + t2 ≥ t1 + t2 Đường đi i – a – c – b – a – jdài hơn đường đi i – a – j Chu trình : a – b – c Trọng số : t3 + t4 + t5 ≥ 0
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Đồ thị không có chu trình có trọng số âm • Đường đi ngắn nhất sẽ là một đường đi đơn
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Đồ thị không có chu trình có trọng số âm • Đồ thị có chứa chu trình có trọng số âm -1 4 3 1 -2 1 2 5 1 2 Độ dài : 3 Độ dài : 1 Độ dài : -1 Độ dài : -∞ • Đường đi : 1 – 2 – 5 • Đường đi : 1 – 2– 3 – 4 –2 – 5 • Đường đi : 1 – 2– 3 – 4 –2– 3 – 4 –2 – 5 • Đường đi : 1 – 2– 3 – 4 –2– … –2 – 5
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Đồ thị không có chu trình có trọng số âm • Đường đi ngắn nhất sẽ là một đường đi đơn • Đồ thị có chứa chu trình có trọng số âm • Độ dài đường đi ngắn nhất giữa một số cặp đỉnh sẽ không thể xác định • Chỉ xét những đồ thị không có chu trình có trọng số âm Chỉ xét những đường đi đơn
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 ShortestPath = Ø MinLen = ∞
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 6 Len = 16 ShortestPath = Ø MinLen = ∞
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 6 Len < MinLen Len = 16 ShortestPath = Ø MinLen = ∞
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 6 Len = 16 ShortestPath = 1 - 2 - 6 MinLen = 16
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 6 Len = 16 ShortestPath = 1 – 2 – 6 MinLen = 16
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 4 – 6 Len = 7 ShortestPath = 1 – 2 – 6 MinLen = 16
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 4 – 6 Len < MinLen Len = 7 ShortestPath = 1 – 2 – 6 MinLen = 16
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 4 – 6 Len = 7 ShortestPath = 1 – 2 – 4 – 6 MinLen = 7
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 2 – 4 – 6 Len = 7 ShortestPath = 1 – 2 – 4 – 6 MinLen = 7
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 3 – 4 – 6 Len = 4 ShortestPath = 1 – 2 – 4 – 6 MinLen = 7
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 3 – 4 – 6 Len < MinLen Len = 4 ShortestPath = 1 – 2 – 4 – 6 MinLen = 7
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 3 – 4 – 6 Len = 4 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 3 – 4 – 6 Len = 4 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 4 – 2 – 6 Len = 25 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 4 – 2 – 6 Len > MinLen Len = 25 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 4 – 2 – 6 Len = 25 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 4 – 6 Len = 6 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 4 – 6 Len > MinLen Len = 6 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Path = 1 – 5 – 4 – 6 Len = 6 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 Không còn đường đi khác từ đỉnh 1 đến đỉnh 6 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4
Tìm đường đi ngắn nhất • Thuật giải vét cạn • Gán độ dài đường đi ngắn nhất bằng ∞ • Tìm một đường đi trong đồ thị từ đỉnh 1 đến đỉnh 6 • Độ dài vừa tìm được bé hơn độ dài đường đi ngắn nhất hiện tại • Gán đường đi ngắn nhất là đường đi vừa tìm được • Lặp lại bước 2 đến khi không còn đường đi nào khác 2 1 15 5 1 6 4 3 1 2 1 5 3 1 ShortestPath = 1 – 5 – 3 – 4 – 6 MinLen = 4