TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN – HỆ VB2 ĐÀO TẠO TỪ XA
BÁO CÁO
BÀI TẬP TUẦN 4
GVHD Lý Thuyết: Đặng Trần Minh Hậu
GDHD Thực hành: Nguyễn Ngọc Thảo
LỚP: Lý Thuyết Đồ Thị - CSC00008
NHÓM 32
MỤC LỤC
A. Bài tập lý thuyết...................................................................................... 3
Câu 1.............................................................................................................. 3
Câu 2.............................................................................................................. 8
B. Bài tập cài đặt.......................................................................................... 9
Những lưu ý quan trọng................................................................................. 9
Kết quả chạy chương trình
.......................................................................................................................
10
A. BÀI TẬP LÝ THUYẾT
Câu 1: Câu 1. Cho đồ thị như hình bên. Hãy áp dụng giải thuậtDijkstra để tìm đường đi ngắn nhất từ đỉnh
A đến các đỉnh còn lại.
Giả sử điểm kết thúc là G và set up L[S] = 0 L[[k] = + ∞
Bước 1: Sự thay đổi của T,L và Prev qua các vòng lặp
a. Lần 1
+ Đầu lần 1:
- Sự thay đổi của T,L và Prev
A
B
T
A
B
L
0
+∞
Prev
-1
-1
- Vì G thuộc T Tiếp tục
C
C
+∞
-1
D
D
+∞
-1
E
E
+∞
-1
F
F
+∞
-1
G
G
+∞
-1
S
S
+∞
-1
E
E
1
F
F
+∞
G
G
+∞
S
S
8
- Chọn I = A ( vì L[A] = 0 nhỏ nhất ), loại A ra khỏi T
SA
DA
EA
k = S, L[S] > L[A] +DSA (+ ∞ > 0 + 8)
L[S] = L[A] +DSA = 0 + 8 = 8
Prev[S] = A
k = D, L[D] > L[A] +DDA (+ ∞ > 0 +2)
L[D] = L[A] +DDA = 0 + 2 = 2
Prev[D] = A
k = E, L[E] > L[A] +DEA (+ ∞ > 0 +1)
L[E] = L[A] +DEA = 0 + 1 = 1
Prev[E] = A
+ Cuối lần 1
- Sự thay đổi của T,L và Prev
A
T
L
0
B
B
+∞
C
C
+∞
D
D
2
Prev
-1
-1
b. Lần 2
+ Đầu lần 2
- Sự thay đổi của T,L và Prev
A
B
T
B
L
0
+∞
Prev
-1
-1
- Vì G thuộc T Tiếp tục
-
-1
A
A
-1
-1
A
C
C
+∞
-1
D
D
2
A
E
E
1
A
F
F
+∞
-1
G
G
+∞
-1
S
S
8
A
F
F
+∞
-1
G
G
5
E
S
S
8
A
F
F
+∞
-1
G
G
5
E
S
S
8
A
Chọn I = E ( vì L[E] = 5 nhỏ nhất ), loại E ra khỏi T
AE
k = A, L[A] < L[E] +DAE (0 < 1 + 1)
BE
k = B, L[B] > L[E] +DBE (+ ∞ > 1 +6)
L[D] = L[E] +DBE = 1 + 6 = 7
Prev[B] = E
k = G, L[G] > L[E] +DGE (+ ∞ > 1 + 4)
L[G] = L[E] +DGE = 1 + 4 = 5
Prev[G] = E
GE
+ Cuối lần 2
- Sự thay đổi của T,L và Prev
A
T
L
Prev
0
-1
B
B
7
E
C
C
+∞
-1
D
D
2
A
E
C
C
+∞
-1
D
D
2
A
E
1
A
c. Lần 3
+ Đầu lần 3
- Sự thay đổi của T,L và Prev
A
B
T
B
L
0
7
Prev
-1
E
- Vì G thuộc T Tiếp tục
-
Chọn I = D ( vì L[D] = 2 nhỏ nhất ), loại D ra khỏi T
AD
k = A, L[A] < L[D] +DAD (0 < 2 + 2)
CD
k = C, L[C] > L[D] +DCD (+ ∞ > 2+3)
L[C] = L[D] +DCD = 2+ 3 = 5
Prev[C] = D
k = F, L[F] > L[D] +DFD (+ ∞ > 2+4)
L[F] = L[D] +DFD = 2+ 4 = 6
Prev[F] = D
k = S, L[S] > L[D] +DSD (8 > 2+5)
L[S] = L[D] +DSD = 2 + 5 = 7
Prev[S] = D
F D
SD
1
A
+ Cuối lần 3
- Sự thay đổi của T,L và Prev
A
T
L
Prev
0
-1
B
B
7
E
C
C
5
D
D
E
2
A
1
A
C
C
5
D
D
E
2
A
1
A
F
F
6
D
G
G
5
E
S
S
7
D
F
F
6
D
G
G
5
E
S
S
7
D
F
F
6
D
G
G
5
E
S
S
7
D
F
F
6
G
G
5
S
S
7
d. Lần 4
+ Đầu lần 4
- Sự thay đổi của T,L và Prev
A
T
L
Prev
0
-1
B
B
7
E
-
Vì G thuộc T Tiếp tục
-
Chọn I = C ( vì L[C] = 5 nhỏ nhất ), loại C ra khỏi T
DC
FC
SC
k = D, L[D] < L[C] +DDC (2 < 5 + 3)
k = F, L[F] < L[C] +DFC (6 < 5+9)
k = S, L[S] < L[C] +DSC (7 < 5+6)
+ Cuối lần 4
- Sự thay đổi của T,L và Prev
A
T
L
Prev
0
-1
B
B
7
E
C
D
E
5
D
2
A
1
A
C
D
E
5
2
1
e. Lần 5
+ Đầu lần 5
- Sự thay đổi của T,L và Prev
A
T
L
0
B
B
7
-
Prev
-1
E
Vì G thuộc T Tiếp tục
-
D
A
A
D
E
D
F
F
5
G
G
S
S
7
D
G
Chọn I = G ( vì L[G] = 5 nhỏ nhất ), loại G ra khỏi T
EG
FG
k = E, L[E] < L[G] +DEG (1 < 5 + 4)
k = F, L[F] > L[G] +DFG (6 > 5+ 0)
L[F] = L[G] + DFG = 5 + 0 = 5
Prev[F] = G
+ Cuối lần 5
- Sự thay đổi của T,L và Prev
A
T
L
Prev
0
-1
B
B
7
E
C
D
E
5
D
2
A
1
A
C
D
E
5
D
2
A
1
A
F
F
5
G
5
E
f. Lần 6
+ Đầu lần 6
- Sự thay đổi của T,L và Prev
A
T
L
Prev
0
-1
B
B
7
E
-
Vì G thuộc T Tiếp tục
-
Chọn I = F ( vì L[F] = 5 nhỏ nhất ), loại F ra khỏi T
CF
DF
5
E
S
S
7
D
k = C, L[C] < L[F] +DCF (5 < 5 + 9)
k = D, L[C] < L[F] +DDF (2 < 5+4)
+ Cuối lần 6
- Sự thay đổi của T,L và Prev
A
T
L
Prev
0
-1
B
B
7
E
C
D
E
F
G
5
D
2
A
1
A
5
G
5
E
C
D
E
F
G
5
2
1
5
5
S
S
7
D
g. Lần 7
+ Đầu lần 7
- Sự thay đổi của T,L và Prev qua các vòng lặp
A
T
L
0
B
B
7
S
S
7
Prev
-1
E
D
A
-
Vì G thuộc T Tiếp tục
-
Chọn I = B ( vì L[B] = 7 nhỏ nhất ), loại B ra khỏi T
EB
A
G
E
D
S
S
7
D
k = E, L[E] < L[B] +DEB (1 < 7+ 6)
+ Cuối lần 7
- Sự thay đổi của T,L và Prev
T
L
Prev
A
B
C
D
E
F
G
0
-1
7
E
5
D
2
A
1
A
5
G
5
E
h. Lần 8
+ Đầu lần 8
- Sự thay đổi của T,L và Prev
T
L
Prev
A
B
C
D
E
F
G
0
-1
7
E
5
D
2
A
1
A
5
G
5
E
S
S
7
D
E
F
G
S
1
A
5
G
5
E
7
D
-
Vì G thuộc T Tiếp tục
-
Chọn I = S ( vì L[S] = 7 nhỏ nhất ), loại S ra khỏi T
AS
CS
D S
k = A, L[A] < L[S] +DAS (0 < 7 + 8)
k = C, L[C] < L[S] +DCS (5 < 7+6)
k = D, L[D] < L[S] +DDS (2 < 7+ 5)
+ Cuối lần 8
- Sự thay đổi của T,L và Prev
A
B
C
D
T
L
0
7
5
2
Prev
-1
E
D
A
Kết luận tóm tắt sự thay đổi của T,L và Prev qua các vòng lặp
T
L
Prev
A
B
C
D
E
F
G
S
0
-1
7
E
5
D
2
A
1
A
5
G
5
E
7
D
Bước 2: Đường đi ngắn nhất từ đỉnh nguồn đến đỉnh đích
Đường đi
Từ A đến B : A E B
Từ A đến C: A D C
Từ A đến D: A D
Từ A đến E: A E
Từ A đến F: A E G F
Từ A đến G: A E G
Từ A đến S: A D S
Chi Phí
L[B] = 7
L[C] = 5
L[D] = 2
L[E] = 1
L[F] = 5
L[G] = 5
L[S] = 7
Câu 2: Cho đồ thị như hình bên. Hãy áp dụng giải thuật Bellman-Ford để tìm đường đi ngắn nhất
từ đỉnh a đến các đỉnh cịn lại.
Bước 1: Trình bày sự thay đổi của đỉnh qua các vòng lặp
π và k
k=0,π=
k=1,π=
k=2,π=
k=3,π=
k=4,π=
k=5,π=
k=6,π=
a
0
0
0
0
0
0
0
b
+∞
-5(a)
-5(a)
-8(c)
-16(d)
-16(d)
-16(d)
c
+∞
+∞
18(s)
18(s)
18(s)
18(s)
18(s)
d
+∞
+∞
25(s)
-7(c)
-7(c)
-7(c)
-7(c)
e
+∞
13(a)
-3(b)
-3(b)
-6(b)
-14(b)
-14(b)
s
+∞
8(a)
8(a)
8(a)
8(a)
8(a)
8(a)
Bước 2 : Cho biết đường đi từ đỉnh nguồn đến các đỉnh cịn lại ( và chi phí của từng đường đi) mà giải
thuật Bellman-Ford đã xác định cho đến thời điểm kết thúc của giải thuật.
Đường đi
Từ a đến b: a s c d b
Từ a đến c: a s c
Từ a đến d: a s c d
Từ a đến e: a s c d b
Từ a đến s: a s
Chi Phí
-16
18
-7
-14
8
B. BÀI TẬP CÀI ĐẶT
1. Những lưu ý quan trọng
a. Tổ chức folder/file
- Câu 1 - Chương trình cài đặt giải thuật Dijkstra chứa trong folder N32-BTCAIDAT-BTTuan04CAU1
- Câu 2 - Chương trình cài đặt giải thuật Bellman-Ford chứa trong folder N32-BTCAIDATBTTuan04-CAU2
b. Đường dẫn bắt đầu của mỗi chương trình
- Lưu ý copy đường dẫn vào hàm main của file Program.cs để chương trình truy xuất
vào đúng file ( bơi màu vàng trong hình 1 và hình 2 )*
*ví dụ đường dẫn: @"D:\VB 2 KHTN\Lý thuyết đồ thị\Bai Tap\Bài tập
tuần 04 - Có tính điểm\N32-21880053,21880147BTTuan04\SOURCE\TestCaseDijkstra1.txt"
Hình 1.1: Ví dụ về đường dẫn tập tin đầu của chương trình cài đặt thuật tốn Dijkstra
Hình 1.2: Ví dụ về đường dẫn tập tin đầu của chương trình cài đặt thuật tốn Bellman-Ford
2. Kết quả chạy chương trình
a. Chạy thuật tốn Dijkstra
Hình 2.1: Kết quả chạy testcase 1 – chương trình cài đặt thuật tốn Dijkstra
Hình 2.2: Kết quả chạy testcase 2 – chương trình cài đặt thuật tốn Dijkstra
b. Chạy thuật tốn Bellman-Ford
Hình 2.3: Kết quả chạy testcase 1 – chương trình cài đặt thuật toán Bellman-Ford
Hình 2.4: Kết quả chạy testcase 2 – chương trình cài đặt thuật toán Bellman-Ford