tìm đường đi ngắn nhất giữa hai đỉnh của đồ thị
DESCRIPTION
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. - PowerPoint PPT PresentationTRANSCRIPT
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
1
2
3
4
5
1
2
3
4
5
6
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
1
35
2
64
1 15
23
1
1
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
i a j
b c
t1 t2
t5 t3
t4
Đường đi : i – a – c – b – a – jĐộ dài : t1 + t3 + t4 + t5 + t2
Chu trình : a – b – cTrọng số : t3 + t4 + t5 ≥ 0
t1 + t3 + t4 + t5 + t2 ≥ t1 + t2
Đường đi i – a – c – b – a – jdài hơn đường đi i – a – j
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 2
34
51
-2
-1
1
2
• Đườ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
Độ dài : 3Độ dài : 1Độ dài : -1Độ dài : -∞
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ố âmChỉ xét những đường đi đơn
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
MinLen = ∞ShortestPath = Ø
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 16Path = 1 – 2 – 6
MinLen = ∞ShortestPath = Ø
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 16Path = 1 – 2 – 6
MinLen = ∞ShortestPath = Ø
Len < MinLen
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 16Path = 1 – 2 – 6
MinLen = 16ShortestPath = 1 - 2 - 6
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 16Path = 1 – 2 – 6
MinLen = 16ShortestPath = 1 – 2 – 6
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 7Path = 1 – 2 – 4 – 6
MinLen = 16ShortestPath = 1 – 2 – 6
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 7Path = 1 – 2 – 4 – 6
MinLen = 16ShortestPath = 1 – 2 – 6
Len < MinLen
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 7Path = 1 – 2 – 4 – 6
MinLen = 7ShortestPath = 1 – 2 – 4 – 6
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 7Path = 1 – 2 – 4 – 6
MinLen = 7ShortestPath = 1 – 2 – 4 – 6
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 4Path = 1 – 5 – 3 – 4 – 6
MinLen = 7ShortestPath = 1 – 2 – 4 – 6
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 4Path = 1 – 5 – 3 – 4 – 6
MinLen = 7ShortestPath = 1 – 2 – 4 – 6
Len < MinLen
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 4Path = 1 – 5 – 3 – 4 – 6
MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 4Path = 1 – 5 – 3 – 4 – 6
MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 25Path = 1 – 5 – 4 – 2 – 6
MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 25Path = 1 – 5 – 4 – 2 – 6
MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6
Len > MinLen
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 25Path = 1 – 5 – 4 – 2 – 6
MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 6Path = 1 – 5 – 4 – 6
MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 6Path = 1 – 5 – 4 – 6
MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6
Len > MinLen
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
Len = 6Path = 1 – 5 – 4 – 6
MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6
Không còn đường đi khác từ đỉnh 1 đến đỉnh 6
Tìm đường đi ngắn nhất Thuật giải vét cạn
1
53
2
64
1 15
2 3
1
1
5
1
• 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
MinLen = 4ShortestPath = 1 – 5 – 3 – 4 – 6