Chương 4:Các bài toán đường đi - Pdf 18

CÁC BÀI TOÁN ĐƯỜNG ĐI
1
NỘI DUNG

Đường đi ngắn nhất
Bài toán
Nguyên lý Bellman
Thuật toán Dijkstra
Thuật toán Floyd
Thuật toán Ford-Bellman
2
ĐƯỜNG ĐI NGẮN NHẤT
3
CB
A
E
D
F
0
328
5 8
4
8
7 1
2 5
2
3 9
Cho đồ thị có hướng có trọng G=(X, E) và hai đỉnh s, t ∈X,
gọi P là một đường đi từ đỉnh s đến đỉnh t, trọng lượng
(hay giá) của đường đi P được định nghĩa là:
L(P) = ∑

L(P)→ -∞.
ĐIỀU KIỆN TỒN TẠI LỜI GiẢI
6
s
t
k
µ

Ma trận trọng lượng L
NxN
được định nghĩa:
L
ij
= trọng lượng cạnh nhỏ nhất nối i đến j nếu có,
L
ij
= ∞ nếu không có cạnh nối i đến j.

Khi cài đặt thuật toán có thể dùng 0 thay cho ∞ bằng
cách đưa thêm một số kiểm tra thích hợp.
DỮ LIỆU NHẬP
7
C
A
B
D
12
7
15
5

= trọng lượng cạnh nhỏ nhất nối i đến j nếu có,
L
ij
= ∞ nếu không có cạnh nối i đến j.

Khi cài đặt thuật toán có thể dùng 0 thay cho ∞ bằng
cách đưa thêm một số kiểm tra thích hợp.
DỮ LIỆU NHẬP
8
C
A
B
D
12
7
15
5
16













1
là đường đi con của P từ s đến k
và P
2
là đường đi con của P từ k đến t. Khi đó P
1
cũng là
đường đi ngắn nhất từ s đến k.
NGUYÊN LÝ BELLMAN
10
L(P
1
’) < L(P
1
) ⇒ L(P
1
’⊕P
2
) < L(P
1
⊕P
2
)=L(P)
s
t
k
P
1
P
1

vk
thì
D[k] = D[v]+L
vk
và Labels[k]=v
THUẬT TOÁN DIJKSTRA
12
VÍ DỤ
13
d(z) = 75

d(u) = 50
1
0
z
s
u
d(z) = 60

d(u) = 50
1
0
z
s
u
Cập nhật độ dài ĐĐ từ s đến đỉnh z: 75  60
VÍ DỤ
Đồ thị G gồm 7 đỉnh, 12
cạnh như hình bên. Tìm
đường đi ngắn nhất từ đỉnh














∞∞∞∞
∞∞∞∞∞
∞∞∞∞∞
∞∞∞
∞∞∞∞∞
∞∞∞∞∞
∞∞∞
042
120
170
8014
50
80
6390
VÍ DỤ
V: đỉnh chưa bị tô màu; D[k]: số có màu đỏ; Labels[k]: số có
màu xanh lá

∞ -1
∞ -1
VÍ DỤ
16
9
1
2
3
4
5
6
7
3
4
8
1
5
6
2
4
17
12
8
0
-1
9
1

-1


7
4
4
4
11
4
6
1
∞ -1
3 1
V: đỉnh chưa bị tô màu; D[k]: số có màu đỏ; Labels[k]: số có
màu xanh lá
VÍ DỤ
18
9
1
2
3
4
5
6
7
3
4
8
1
5
6
2
4

1
5
6
2
4
17
12
8
0
-1
7
4
4
4
9
3
6
1
∞ -1
3 1
V: đỉnh chưa bị tô màu; D[k]: số có màu đỏ; Labels[k]: số có
màu xanh lá
VÍ DỤ
ĐĐNN từ 1 đến 5 có trọng lượng D[5]=9: 5  3  4  1
20
9
1
2
3
4

∞ ∞ ∞ ∞ ∞ ∞
1 9

3
∞ ∞
6
2 7 4 11

6
3 7 9

6
4 7 9

5 9

1 2 3 4 5 6 7
0 -1 -1 -1 -1 -1 -1 -1
1 1 -1 1 -1 -1 1
2 4 4 4 -1 1
3 4 3 -1 1
4 4 3 -1
5 3 -1
D
Labels
VÍ DỤ
22
CB
A
E

0
328
5 8
4
8
7 1
2 5
2
3 9
CB
A
E
D
F
0
327
5 8
4
8
7 1
2 5
2
3 9
VÍ DỤ
23
CB
A
E
D
F

THUẬT TOÁN DIJKSTRA – CÀI ĐẶT
Graph Graph::PrintPath(int s, int t)
{
int temp[MAX];
int dem = 0;
//In đường đi ngắn nhất từ s đến t dựa vào Labels
while(Labels[t] != -1)
{
temp[dem++]=t;
t=Labels[t];
}
temp[dem++]=s;
while (dem > 0)
printf(“%d “, temp[ dem]);
}


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status