lOMoARcPSD|37922327
Hc vin Công ngh Bưu chính Viễn thông
Khoa Công ngh thông tin 1
Toán ri rc 2
Bài toán tìm đường đi ngn nht
Ni dung
Ngô Xn Bách
B
môn KHMT, Khoa CNTT1
lOMoARcPSD|37922327
Phát biu bài toán tìm ường i ngn nht
Thut toán Dijkstra
Thut toán Bellman-Ford
Thut toán Floyd
lOMoARcPSD|37922327
Bài toán tìm đưng đi ngn nht (1/2)
Khái nim dài ường i trên th
o Xét th 𝐺 =< 𝑉, 𝐸 > vi tp nh 𝑉 và tp cnh 𝐸
o Vi mi cnh (𝑢, 𝑣) ∈ 𝐸, ta ặt tương ng mt s thc 𝑎(𝑢, 𝑣) ược
gi là trng s ca cnh, 𝑎(𝑢, 𝑣) = ∞ nếu (𝑢, 𝑣) ∉ 𝐸
o Nếu dãy 𝑣
0
, 𝑣
1
, . . . , 𝑣
𝑘
là một ường i trên 𝐺 tσ
𝑘
𝑖=1
𝑎(𝑣
𝑖−1
, 𝑣
𝑖
) ược
gi là dài của ường i
Bài toán dng tng quát
o Tìm ường i (có dài) ngn nht t mt nh xut phát 𝑠 𝑉 ( nh
ngun) ến nh cui 𝑡 𝑉 ( nh ích)?
o Đường i như vậy ược gọi là ường i ngn nht t 𝑠 ến 𝑡, dài ca
ường i 𝑑(𝑠, 𝑡) ược gi là khong cách ngn nht t 𝑠 ến 𝑡
o Nếu không tn tại ường i t 𝑠 ến 𝑡 thì dài ường i
𝑑(𝑠, 𝑡) = ∞
lOMoARcPSD|37922327
Bài toán tìm đường đi ngn nht (2/2)
Trường hp 1: 𝑠 c nh, 𝑡 thay i
o Tìm ường i ngn nht t 𝑠 ến tt c các nh còn li trên th ?
o Đối vi thtrng s không âm, bài toán luôn có li gii bng
thut toán Dijkstra
o Đối vi thtrng s âm nhưng không tồn ti chu trình âm,
bài toán có li gii bng thut toán Bellman-Ford
o Trong trường hp th chu trình âm, bài toán không có li gii
Trường hp 2: 𝑠 thay i và 𝑡 cũng thay ổi
o Tìm ường i ngn nht gia tt c các cp nh ca th o Đi vi
thtrng s không âm, bài toán ược gii quyết bng cách thc
hin lp li 𝑛 ln thut toán Dijkstra
o Đối vi th không có chu trình âm, bài toán có th gii quyết
bng thut toán Floyd
Ni dung
lOMoARcPSD|37922327
Phát biu bài toán tìm ường i ngn nht
Thut toán Dijkstra
Thut toán Bellman-Ford
Thut toán Floyd
lOMoARcPSD|37922327
Thut toán Dijkstra (1/2)
Mc ích
o S dng tìm ường i ngn nht t mt nh 𝑠 ti các nh còn
li ca th
o Áp dng cho th có hướng vi trng s không âm
Tư tưởng
o Gán nhãn tm thi cho các nh
Nhãn ca mi nh cho biết cn trên ca dài ường i ngn nht ti nh ó
o Các nhãn này s ược biến i (tính li) nh mt th tc lp
mi một bước lp s có mt nhãn tm thi tr thành nhãn c nh
(nhãn ó chính dài ường i ngn nht t 𝑠 ến nh ó)
Thut toán Dijkstra (2/2)
Dijkstra (𝑠){
lOMoARcPSD|37922327
Bước 1 (Khi to):
𝑑[𝑠] = 0; //Gán nhãn ca nh 𝑠 0 𝑇 = 𝑉\{𝑠}; // 𝑇
tp nh nhãn tm thi for (𝑣 𝑉){ //S dng 𝑠 gán
nhãn cho các ỉnh còn lại
𝑑[𝑣] = 𝑎(𝑠, 𝑣);
𝑡𝑟𝑢𝑜𝑐[𝑣] = 𝑠; }
Bước 2 (Lp):
while (𝑇 ≠ ∅ ){
Tìm nh 𝑢 𝑇 sao cho 𝑑[𝑢] = min{ 𝑑[𝑧] | 𝑧 𝑇};
𝑇 = 𝑇\{𝑢}; //c nh nhãn nh 𝑢
for (𝑣 𝑇){ //S dng 𝑢, gán nhãn laị cho các ỉnh if
(𝑑[𝑣] > 𝑑[𝑢] + 𝑎(𝑢, 𝑣)){
𝑑[𝑣] = 𝑑[𝑢] + 𝑎(𝑢, 𝑣); //Gán li nhãn cho nh 𝑣;
𝑡𝑟𝑢𝑜𝑐[𝑣] = 𝑢; }
}
}
}
lOMoARcPSD|37922327
Ví d - Dijkstra (1/2)
2
1
3
4
1
2
2
1
5
7
1
1
3
4
Áp
d
ng
thu
t
toán
Dijkstra
tìm
đ
ườ
ng
đi
ng
nnh
tt
đ
nhs
t
icác
đ
nh
cònl
ic
a
đ
th
.
lOMoARcPSD|37922327
Ví d - Dijkstra (2/2)
lOMoARcPSD|37922327
lOMoARcPSD|37922327
Ni dung
Phát biu bài toán tìm ường i ngn nht
Thut toán Dijkstra
Thut toán Bellman-Ford
Thut toán Floyd
lOMoARcPSD|37922327
Thut toán Bellman-Ford (1/2)
Mc ích o S dng tìm ưng i ngn nht t mt nh 𝑠 ti các nh
còn li ca th
o Áp dng cho th có hướng không có chu trình âm (có th
cnh âm)
Tư tưởng
o Gán nhãn tm thi cho các nh
Nhãn ca mi nh cho biết cn trên ca dài ường i ngn nht ti nh
ó
o Các nhãn này s ưc làm tt dn (tính li) nh mt th tc lp
Mi khi phát hin 𝑑[𝑣] > 𝑑[𝑢] + 𝑎(𝑢, 𝑣), cp nht 𝑑 𝑣 = 𝑑[𝑢] + 𝑎(𝑢, 𝑣)
Thut toán Bellman-Ford (2/2)
Bellman-Ford(𝑠){
lOMoARcPSD|37922327
Bước 1 (Khi to):
for (𝑣 𝑉){ //S dng 𝑠 gán nhãn cho các ỉnh còn lại
𝑑[𝑣] = 𝑎(𝑠, 𝑣);
𝑡𝑟𝑢𝑜𝑐[𝑣] = 𝑠; }
Bước 2 (Lp):
𝑑 𝑠 = 0;
for (𝑘 = 1; 𝑘 𝑛 − 1; 𝑘 + + ){
for (𝑣 𝑉\{𝑠}){
for (𝑢 𝑉){ if (𝑑[𝑣] > 𝑑[𝑢] + 𝑎(𝑢,
𝑣)){
𝑑[𝑣] = 𝑑[𝑢] + 𝑎(𝑢, 𝑣);
𝑡𝑟𝑢𝑜𝑐[𝑣] = 𝑢;
}
}
}
}
}
lOMoARcPSD|37922327
Ví d: Bellman-Ford (1/2)
-5
1
5
4
3
1
3
8
3
3
1
2
4
Áp
d
ng
thu
t
toán
Bellman-
Ford
tìm
đ
ườ
ng
đi
ng
nnh
tt
đ
nhs
t
icác
đ
nh
cònl
ic
a
đ
th
.
lOMoARcPSD|37922327
Ví d: Bellman-Ford (2/2)
-5
1
5
4
1
3
8
3
3
1
2
4
Áp
d
ng
thu
t
toán
Bellman-
Ford
tìm
đ
ườ
ng
đi
ng
nnh
tt
đ
nhs
t
icác
đ
nh
cònl
ic
a
đ
th
.
B
ướ
c
l
p
Đ
nh
1
Đ
nh
2
Đ
nh
Đ
nh
4
Đ
nh
5
Kh
it
o
,
1
,
1
∞, 1
∞, 1
,
3
1
,
1
k=1
,
1
4
,
,
3
2
,
-1
1
,
2
,
1
4
,
,
3
5
3
,
-1
,
5
,
1
4
1
,
-1
,
3
,
3
𝑑[𝑢]
𝑡𝑟𝑢𝑜𝑐[𝑢]
Không
thay
i
giá
tr
lOMoARcPSD|37922327
Ni dung
Phát biu bài toán tìm ường i ngn nht
Thut toán Dijkstra
Thut toán Bellman-Ford
Thut toán Floyd
lOMoARcPSD|37922327
Thu
t toán Floyd (1/3)
Mc ích o S dng tìm ưng i ngn nht gia tt c các cp nh
ca th
o Áp dng cho th có hướng không có chu trình âm (có th
cnh âm)
Tư tưởng
o Thc hin quá trình lp
Xét tng nh, vi tt c các ường i (gia 2 nh bt k), nếu ường i
hin ti lớn hơn ường i qua nh ang xét, ta thay lại thành ường i qua
nh này
lOMoARcPSD|37922327
Thu
t toán Floyd (2/3)
Floyd( ){
Bước 1 (Khi to):
for (𝑖 = 1, 𝑖 𝑛; 𝑖 + +){ for( 𝑗 = 1, 𝑗 𝑛; 𝑗 + +){ //Xét
tng cp đnh
𝑑[𝑖, 𝑗] = 𝑎(𝑖, 𝑗);
if(𝑎 𝑖, 𝑗 ! = ∞) 𝑛𝑒𝑥𝑡[𝑖, 𝑗] = 𝑗;
else 𝑛𝑒𝑥𝑡 𝑖, 𝑗 = 𝑛𝑢𝑙𝑙;
}
}
Bước 2 (Lp):
for (𝑘 = 1, 𝑘 𝑛; 𝑘 + +){ for (𝑖 = 1, 𝑖 𝑛; 𝑖
+ +){ for (𝑗 = 1, 𝑗 𝑛; 𝑗 + +){
if (𝑑[𝑖, 𝑗] > 𝑑[𝑖, 𝑘] + 𝑑[𝑘, 𝑗]){
𝑑[𝑖, 𝑗] = 𝑑[𝑖, 𝑘] + 𝑑[𝑘, 𝑗];
𝑛𝑒𝑥𝑡[𝑖, 𝑗] = 𝑛𝑒𝑥𝑡[𝑖, 𝑘]; }
lOMoARcPSD|37922327
Thu
}
}
}
}
t toán Floyd (3/3)
Khôi phục ường i
Reconstruct-Path( 𝑢, 𝑣){
if ( 𝑛𝑒𝑥𝑡[𝑢][𝑣] == 𝑛𝑢𝑙𝑙)
<Không có đường đi t 𝑢 đến 𝑣>;
else{
𝑝𝑎𝑡ℎ = [𝑢]; // path bt u t 𝑢 while(𝑢
𝑣){
𝑢 = 𝑛𝑒𝑥𝑡[𝑢][𝑣];
lOMoARcPSD|37922327
Thu
𝑝𝑎𝑡ℎ. 𝑎𝑝𝑝𝑒𝑛𝑑(𝑢); //ỉnh tiếp theo trên ường i
}
return 𝑝𝑎𝑡ℎ;
}
}
lOMoARcPSD|37922327
Kim nghim thut toán
Áp
d
ng
thu
t
toán
Floyd
tìm
đ
ườ
ng
đi
ng
n
nh
t
gi
at
tc
cácc
p
đ
nhc
a
đ
th
.
3
3
4
4
-2
-1
2
lOMoARcPSD|37922327
Tóm tt
Bài toán tìm ường i ngn nht trên th, các dng
ca bài toán
Thut toán Dijkstra, áp dng
Thut toán Bellman-Ford, áp dng
lOMoARcPSD|37922327
Thut toán Floyd, áp dng
lOMoARcPSD|37922327
Bài tp
Làm mt s bài tp trong giáo trình

Preview text:

lOMoARcPSD| 37922327
Học viện Công nghệ Bưu chính Viễn thông
Khoa Công nghệ thông tin 1 Toán rời rạc 2
Bài toán tìm đường đi ngắn nhất Ngô Xuân Bách
B môn KHMT, Khoa CNTT1 Nội dung lOMoARcPSD| 37922327 
Phát biểu bài toán tìm ường i ngắn nhất  Thuật toán Dijkstra
 Thuật toán Bellman-Ford  Thuật toán Floyd lOMoARcPSD| 37922327
Bài toán tìm đường đi ngắn nhất (1/2)
 Khái niệm ộ dài ường i trên ồ thị
o Xét ồ thị 𝐺 =< 𝑉, 𝐸 > với tập ỉnh 𝑉 và tập cạnh 𝐸
o Với mỗi cạnh (𝑢, 𝑣) ∈ 𝐸, ta ặt tương ứng một số thực 𝑎(𝑢, 𝑣) ược
gọi là trọng số của cạnh, 𝑎(𝑢, 𝑣) = ∞ nếu (𝑢, 𝑣) ∉ 𝐸
o Nếu dãy 𝑣0, 𝑣1, . . . , 𝑣𝑘 là một ường i trên 𝐺 thì σ𝑘𝑖=1 𝑎(𝑣𝑖−1, 𝑣𝑖) ược
gọi là ộ dài của ường i
 Bài toán dạng tổng quát
o Tìm ường i (có ộ dài) ngắn nhất từ một ỉnh xuất phát 𝑠 ∈ 𝑉 ( ỉnh
nguồn) ến ỉnh cuối 𝑡 ∈ 𝑉 ( ỉnh ích)?
o Đường i như vậy ược gọi là ường i ngắn nhất từ 𝑠 ến 𝑡, ộ dài của
ường i 𝑑(𝑠, 𝑡) ược gọi là khoảng cách ngắn nhất từ 𝑠 ến 𝑡
o Nếu không tồn tại ường i từ 𝑠 ến 𝑡 thì ộ dài ường i 𝑑(𝑠, 𝑡) = ∞ lOMoARcPSD| 37922327
Bài toán tìm đường đi ngắn nhất (2/2)
Trường hợp 1: 𝑠 cố ịnh, 𝑡 thay ổi
o Tìm ường i ngắn nhất từ 𝑠 ến tất cả các ỉnh còn lại trên ồ thị ?
o Đối với ồ thị có trọng số không âm, bài toán luôn có lời giải bằng thuật toán Dijkstra
o Đối với ồ thị có trọng số âm nhưng không tồn tại chu trình âm,
bài toán có lời giải bằng thuật toán Bellman-Ford
o Trong trường hợp ồ thị có chu trình âm, bài toán không có lời giải
Trường hợp 2: 𝑠 thay ổi và 𝑡 cũng thay ổi
o Tìm ường i ngắn nhất giữa tất cả các cặp ỉnh của ồ thị o Đối với ồ
thị có trọng số không âm, bài toán ược giải quyết bằng cách thực
hiện lặp lại 𝑛 lần thuật toán Dijkstra
o Đối với ồ thị không có chu trình âm, bài toán có thể giải quyết bằng thuật toán Floyd Nội dung lOMoARcPSD| 37922327
Phát biểu bài toán tìm ường i ngắn nhất  Thuật toán Dijkstra
 Thuật toán Bellman-Ford  Thuật toán Floyd lOMoARcPSD| 37922327 Thuật toán Dijkstra (1/2)  Mục ích
o Sử dụng ể tìm ường i ngắn nhất từ một ỉnh 𝑠 tới các ỉnh còn lại của ồ thị
o Áp dụng cho ồ thị có hướng với trọng số không âm  Tư tưởng
o Gán nhãn tạm thời cho các ỉnh
 Nhãn của mỗi ỉnh cho biết cận trên của ộ dài ường i ngắn nhất tới ỉnh ó
o Các nhãn này sẽ ược biến ổi (tính lại) nhờ một thủ tục lặp
 Ở mỗi một bước lặp sẽ có một nhãn tạm thời trở thành nhãn cố ịnh
(nhãn ó chính là ộ dài ường i ngắn nhất từ 𝑠 ến ỉnh ó) Thuật toán Dijkstra (2/2)
Dijkstra (𝑠){ lOMoARcPSD| 37922327 Bước 1 (Khởi tạo):
𝑑[𝑠] = 0; //Gán nhãn của ỉnh 𝑠 là 0 𝑇 = 𝑉\{𝑠}; // 𝑇 là
tập ỉnh có nhãn tạm thời for (𝑣 ∈ 𝑉){ //Sử dụng 𝑠 gán
nhãn cho các ỉnh còn lại
𝑑[𝑣] = 𝑎(𝑠, 𝑣);
𝑡𝑟𝑢𝑜𝑐[𝑣] = 𝑠; } Bước 2 (Lặp): while (𝑇 ≠ ∅ ){
Tìm ỉnh 𝑢 ∈ 𝑇 sao cho 𝑑[𝑢] = min{ 𝑑[𝑧] | 𝑧 ∈ 𝑇};
𝑇 = 𝑇\{𝑢}; //cố ịnh nhãn ỉnh 𝑢
for (𝑣 ∈ 𝑇){ //Sử dụng 𝑢, gán nhãn laị cho các ỉnh if
(𝑑[𝑣] > 𝑑[𝑢] + 𝑎(𝑢, 𝑣)){
𝑑[𝑣] = 𝑑[𝑢] + 𝑎(𝑢, 𝑣); //Gán lại nhãn cho ỉnh 𝑣;
𝑡𝑟𝑢𝑜𝑐[𝑣] = 𝑢; } } } } lOMoARcPSD| 37922327 Ví dụ - Dijkstra (1/2) Áp d ụng thu t ậ 7 toán Dijkstra 2 3 6 tìm đ ng đi 5 1 ườ ng ắnnh tt ấ ừ đ nhs 1 t icác 1 1 2 1 ỉ ố ớ đ ỉnh cònl ic a ạ ủ 4 đ ồ th . ị 1 5 4 2 3 lOMoARcPSD| 37922327 Ví dụ - Dijkstra (2/2) lOMoARcPSD| 37922327 lOMoARcPSD| 37922327 Nội dung
Phát biểu bài toán tìm ường i ngắn nhất  Thuật toán Dijkstra
 Thuật toán Bellman-Ford  Thuật toán Floyd lOMoARcPSD| 37922327
Thuật toán Bellman-Ford (1/2)
 Mục ích o Sử dụng ể tìm ường i ngắn nhất từ một ỉnh 𝑠 tới các ỉnh còn lại của ồ thị
o Áp dụng cho ồ thị có hướng và không có chu trình âm (có thể có cạnh âm)  Tư tưởng
o Gán nhãn tạm thời cho các ỉnh
 Nhãn của mỗi ỉnh cho biết cận trên của ộ dài ường i ngắn nhất tới ỉnh ó
o Các nhãn này sẽ ược làm tốt dần (tính lại) nhờ một thủ tục lặp
 Mỗi khi phát hiện 𝑑[𝑣] > 𝑑[𝑢] + 𝑎(𝑢, 𝑣), cập nhật 𝑑 𝑣 = 𝑑[𝑢] + 𝑎(𝑢, 𝑣)
Thuật toán Bellman-Ford (2/2)
Bellman-Ford(𝑠){ lOMoARcPSD| 37922327 Bước 1 (Khởi tạo):
for (𝑣 ∈ 𝑉){ //Sử dụng 𝑠 gán nhãn cho các ỉnh còn lại
𝑑[𝑣] = 𝑎(𝑠, 𝑣);
𝑡𝑟𝑢𝑜𝑐[𝑣] = 𝑠; } Bước 2 (Lặp): 𝑑 𝑠 = 0;
for (𝑘 = 1; 𝑘 ≤ 𝑛 − 1; 𝑘 + + ){
for (𝑣 ∈ 𝑉\{𝑠}){
for (𝑢 ∈ 𝑉){ if (𝑑[𝑣] > 𝑑[𝑢] + 𝑎(𝑢, 𝑣)){
𝑑[𝑣] = 𝑑[𝑢] + 𝑎(𝑢, 𝑣);
𝑡𝑟𝑢𝑜𝑐[𝑣] = 𝑢; } } } } } lOMoARcPSD| 37922327 Ví dụ: Bellman-Ford (1/2) 3 Áp d ng thu t 1 5 ụ ậ toán Bellman- 1 8 Ford tìm đ ng -5 4 ườ đi ng ắnnh tt ấ ừ đ nhs t icác 2 3 ỉ 1 ố ớ 4 đ ỉnh cònl ic a ạ ủ 3 1 đ ồ th . ị 3 2 lOMoARcPSD| 37922327 Ví dụ: Bellman-Ford (2/2) 3 Áp d ng thu t 1 5 ụ ậ toán Bellman- 1 8 Ford tìm đ ng -5 4 ườ đi ng ắnnh tt ấ ừ đ nhs t icác 2 3 ỉ 1 ố ớ 4 đ ỉnh cònl ic a ạ ủ 3 1 đ ồ th . ị 3 𝑑[𝑢] 2 𝑡𝑟𝑢𝑜𝑐[𝑢] B ướ c
Đ ỉ nh 1 Đ ỉ nh 2 Đ ỉ nh 3 Đ ỉ nh 4 Đ ỉ nh 5 l ặ p Kh ở it ạ o 0 , 1 , 1 1 ∞, 1 ∞, 1 , 3 1 k=1 , 0 1 1 1 , 4 , 2 4 , 2 -1 3 , 2 0 , 1 1 , 1 4 2 , , 3 5 -1 3 , 3 Không , 0 1 , 1 1 4 2 , 3 , 5 -1 , 3 thay ổi giá trị lOMoARcPSD| 37922327 Nội dung
Phát biểu bài toán tìm ường i ngắn nhất  Thuật toán Dijkstra
 Thuật toán Bellman-Ford  Thuật toán Floyd lOMoARcPSD| 37922327 Thuậ t toán Floyd (1/3)
 Mục ích o Sử dụng ể tìm ường i ngắn nhất giữa tất cả các cặp ỉnh của ồ thị
o Áp dụng cho ồ thị có hướng và không có chu trình âm (có thể có cạnh âm)  Tư tưởng
o Thực hiện quá trình lặp
Xét từng ỉnh, với tất cả các ường i (giữa 2 ỉnh bất kỳ), nếu ường i
hiện tại lớn hơn ường i qua ỉnh ang xét, ta thay lại thành ường i qua ỉnh này lOMoARcPSD| 37922327 Thuậ t toán Floyd (2/3) Floyd( ){ Bước 1 (Khởi tạo):
for (𝑖 = 1, 𝑖 ≤ 𝑛; 𝑖 + +){ for( 𝑗 = 1, 𝑗 ≤ 𝑛; 𝑗 + +){ //Xét từng cặp đỉnh
𝑑[𝑖, 𝑗] = 𝑎(𝑖, 𝑗);
if(𝑎 𝑖, 𝑗 ! = ∞) 𝑛𝑒𝑥𝑡[𝑖, 𝑗] = 𝑗;
else 𝑛𝑒𝑥𝑡 𝑖, 𝑗 = 𝑛𝑢𝑙𝑙; } } Bước 2 (Lặp):
for (𝑘 = 1, 𝑘 ≤ 𝑛; 𝑘 + +){ for (𝑖 = 1, 𝑖 ≤ 𝑛; 𝑖
+ +){ for (𝑗 = 1, 𝑗 ≤ 𝑛; 𝑗 + +){
if (𝑑[𝑖, 𝑗] > 𝑑[𝑖, 𝑘] + 𝑑[𝑘, 𝑗]){
𝑑[𝑖, 𝑗] = 𝑑[𝑖, 𝑘] + 𝑑[𝑘, 𝑗];
𝑛𝑒𝑥𝑡[𝑖, 𝑗] = 𝑛𝑒𝑥𝑡[𝑖, 𝑘]; } lOMoARcPSD| 37922327 Thuậ } } } } t toán Floyd (3/3) Khôi phục ường i
Reconstruct-Path( 𝑢, 𝑣){
if ( 𝑛𝑒𝑥𝑡[𝑢][𝑣] == 𝑛𝑢𝑙𝑙) ; else{
𝑝𝑎𝑡ℎ = [𝑢]; // path bắt ầu từ 𝑢 while(𝑢 ≠ 𝑣){
𝑢 = 𝑛𝑒𝑥𝑡[𝑢][𝑣]; lOMoARcPSD| 37922327 Thuậ
𝑝𝑎𝑡ℎ. 𝑎𝑝𝑝𝑒𝑛𝑑(𝑢); //ỉnh tiếp theo trên ường i }
return 𝑝𝑎𝑡ℎ; } } lOMoARcPSD| 37922327 Kiểm nghiệm thuật toán Áp d ụng thu t ậ 1 toán Floyd tìm -2 đ ường đi ng n 4 ắ nh ất gi at tc 3 ữ ấ ả 2 cácc 3 ặp đ nhc a ỉ ủ đ ồ th . ị -1 2 4 lOMoARcPSD| 37922327 Tóm tắt
 Bài toán tìm ường i ngắn nhất trên ồ thị, các dạng của bài toán
 Thuật toán Dijkstra, áp dụng
 Thuật toán Bellman-Ford, áp dụng lOMoARcPSD| 37922327
 Thuật toán Floyd, áp dụng lOMoARcPSD| 37922327 Bài tập
Làm một số bài tập trong giáo trình