Tải bản đầy đủ (.docx) (13 trang)

Lý thuyết đồ thị giải bài tập tìm đường đi ngắn nhất giải thuật toán dijkstra thuật toán bellman ford

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.18 MB, 13 trang )

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
SA

DA

EA

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

AE

k = A, L[A] < L[E] +DAE (0 < 1 + 1)

BE

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

GE

+ 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

AD


k = A, L[A] < L[D] +DAD (0 < 2 + 2)

CD

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

SD

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

DC

FC
SC

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

EG
FG

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

CF
DF

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


EB

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

AS
CS
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



×