Giai thuat va lap trinh
Trang 1LÊ MINH HOÀNG
Bài gi ng chuyên đ
i h c S ph m Hà N i, 1999-2002
Trang 3L i c m n
Tôi mu n bày t lòng bi t n đ i v i nh ng ng i th y đã ch d y t n tình trong nh ng n m tháng
đ y khó kh n khi tôi m i b c vào h c tin h c và l p trình S hi u bi t và lòng nhi t tình c a các
th y không nh ng đã cung c p cho tôi nh ng ki n th c quý báu mà còn là t m g ng sáng cho tôi noi theo khi tôi đ ng trên b c gi ng c ng v i t cách là m t ng i th y
Cu n tài li u này đ c vi t d a trên nh ng tài li u thu th p đ c t nhi u ngu n khác nhau, b i công s c c a nhi u th h th y trò đã t ng gi ng d y và h c t p t i Kh i Ph thông chuyên Toán- Tin, i h c S ph m Hà N i, còn tôi ch là ng i t ng h p l i Qua đây, tôi mu n g i l i c m n
t i các đ ng nghi p đã đ c và đóng góp nh ng ý ki n quí báu, c m n các b n h c sinh - nh ng con ng i đã tr c ti p làm nên cu n sách này
Do th i gian h n h p, m t s chuyên đ tuy đã có nh ng ch a k p ch nh s a và đ a vào tài li u
B n đ c có th tham kh o thêm trong ph n tra c u R t mong nh n đ c nh ng l i nh n xét và góp
ý c a các b n đ hoàn thi n cu n sách này
Tokyo, 28 tháng 4 n m 2003
Lê Minh Hoàng
Trang 5i
M C L C
PH N 1 BÀI TOÁN LI T KÊ 1
§1 NH C L I M T S KI N TH C I S T H P 2
1.1 CH NH H P L P 2
1.2 CH NH H P KHÔNG L P 2
1.3 HOÁN V 2
1.4 T H P 3
§2 PH NG PHÁP SINH (GENERATION) 4
2.1 SINH CÁC DÃY NH PHÂN DÀI N 5
2.2 LI T KÊ CÁC T P CON K PH N T 6
2.3 LI T KÊ CÁC HOÁN V 8
§3 THU T TOÁN QUAY LUI 12
3.1 LI T KÊ CÁC DÃY NH PHÂN DÀI N 12
3.2 LI T KÊ CÁC T P CON K PH N T 13
3.3 LI T KÊ CÁC CH NH H P KHÔNG L P CH P K 15
3.4 BÀI TOÁN PHÂN TÍCH S 16
3.5 BÀI TOÁN X P H U 18
§4 K THU T NHÁNH C N 24
4.1 BÀI TOÁN T I U 24
4.2 S BÙNG N T H P 24
4.3 MÔ HÌNH K THU T NHÁNH C N 24
4.4 BÀI TOÁN NG I DU L CH 25
4.5 DÃY ABC 28
PH N 2 C U TRÚC D LI U VÀ GI I THU T 33
§1 CÁC B C C B N KHI TI N HÀNH GI I CÁC BÀI TOÁN TIN H C 34
1.1 XÁC NH BÀI TOÁN 34
1.2 TÌM C U TRÚC D LI U BI U DI N BÀI TOÁN 34
1.3 TÌM THU T TOÁN 35
1.4 L P TRÌNH 37
1.5 KI M TH 37
1.6 T I U CH NG TRÌNH 38
§2 PHÂN TÍCH TH I GIAN TH C HI N GI I THU T 40
2.1 PH C T P TÍNH TOÁN C A GI I THU T 40
2.2 XÁC NH PH C T P TÍNH TOÁN C A GI I THU T 40
2.3 PH C T P TÍNH TOÁN V I TÌNH TR NG D LI U VÀO 43
2.4 CHI PHÍ TH C HI N THU T TOÁN 43
Trang 6ii
§3 QUY VÀ GI I THU T QUY 45
3.1 KHÁI NI M V QUY 45
3.2 GI I THU T QUY 45
3.3 VÍ D V GI I THU T QUY 46
3.4 HI U L C C A QUY 50
§4 C U TRÚC D LI U BI U DI N DANH SÁCH 52
4.1 KHÁI NI M DANH SÁCH 52
4.2 BI U DI N DANH SÁCH TRONG MÁY TÍNH 52
§5 NG N X P VÀ HÀNG I 58
5.1 NG N X P (STACK) 58
5.2 HÀNG I (QUEUE) 60
§6 CÂY (TREE) 64
6.1 NH NGH A 64
6.2 CÂY NH PHÂN (BINARY TREE) 65
6.3 BI U DI N CÂY NH PHÂN 67
6.4 PHÉP DUY T CÂY NH PHÂN 69
6.5 CÂY K_PHÂN 70
6.6 CÂY T NG QUÁT 71
§7 KÝ PHÁP TI N T , TRUNG T VÀ H U T 74
7.1 BI U TH C D I D NG CÂY NH PHÂN 74
7.2 CÁC KÝ PHÁP CHO CÙNG M T BI U TH C 74
7.3 CÁCH TÍNH GIÁ TR BI U TH C 75
7.4 CHUY N T D NG TRUNG T SANG D NG H U T 78
7.5 XÂY D NG CÂY NH PHÂN BI U DI N BI U TH C 80
§8 S P X P (SORTING) 82
8.1 BÀI TOÁN S P X P 82
8.2 THU T TOÁN S P X P KI U CH N (SELECTIONSORT) 84
8.3 THU T TOÁN S P X P N I B T (BUBBLESORT) 85
8.4 THU T TOÁN S P X P KI U CHÈN 85
8.5 SHELLSORT 87
8.6 THU T TOÁN S P X P KI U PHÂN O N (QUICKSORT) 88
8.7 THU T TOÁN S P X P KI U VUN NG (HEAPSORT) 92
8.8 S P X P B NG PHÉP M PHÂN PH I (DISTRIBUTION COUNTING) 95
8.9 TÍNH N NH C A THU T TOÁN S P X P (STABILITY) 96
8.10 THU T TOÁN S P X P B NG C S (RADIXSORT) 97
8.11 THU T TOÁN S P X P TR N (MERGESORT) 102
8.12 CÀI T 105
8.13 ÁNH GIÁ, NH N XÉT 112
§9 TÌM KI M (SEARCHING) 116
Trang 7iii
9.1 BÀI TOÁN TÌM KI M 116
9.2 TÌM KI M TU N T (SEQUENTIAL SEARCH) 116
9.3 TÌM KI M NH PHÂN (BINARY SEARCH) 116
9.4 CÂY NH PHÂN TÌM KI M (BINARY SEARCH TREE - BST) 117
9.5 PHÉP B M (HASH) 122
9.6 KHOÁ S V I BÀI TOÁN TÌM KI M 122
9.7 CÂY TÌM KI M S H C (DIGITAL SEARCH TREE - DST) 123
9.8 CÂY TÌM KI M C S (RADIX SEARCH TREE - RST) 126
9.9 NH NG NH N XÉT CU I CÙNG 131
PH N 3 QUY HO CH NG 133
§1 CÔNG TH C TRUY H I 134
1.1 VÍ D 134
1.2 C I TI N TH NH T 135
1.3 C I TI N TH HAI 137
1.4 CÀI T QUY 137
§2 PH NG PHÁP QUY HO CH NG 139
2.1 BÀI TOÁN QUY HO CH 139
2.2 PH NG PHÁP QUY HO CH NG 139
§3 M T S BÀI TOÁN QUY HO CH NG 143
3.1 DÃY CON N I U T NG DÀI NH T 143
3.2 BÀI TOÁN CÁI TÚI 148
3.3 BI N I XÂU 150
3.4 DÃY CON CÓ T NG CHIA H T CHO K 154
3.5 PHÉP NHÂN T H P DÃY MA TR N 159
3.6 BÀI T P LUY N T P 163
PH N 4 CÁC THU T TOÁN TRÊN TH 169
§1 CÁC KHÁI NI M C B N 170
1.1 NH NGH A TH (GRAPH) 170
1.2 CÁC KHÁI NI M 171
§2 BI U DI N TH TRÊN MÁY TÍNH 173
2.1 MA TR N LI N K (MA TR N K ) 173
2.2 DANH SÁCH C NH 174
2.3 DANH SÁCH K 175
2.4 NH N XÉT 176
§3 CÁC THU T TOÁN TÌM KI M TRÊN TH 177
3.1 BÀI TOÁN 177
3.2 THU T TOÁN TÌM KI M THEO CHI U SÂU (DEPTH FIRST SEARCH) 178
3.3 THU T TOÁN TÌM KI M THEO CHI U R NG (BREADTH FIRST SEARCH) 184
Trang 8iv
3.4 PH C T P TÍNH TOÁN C A BFS VÀ DFS 189
§4 TÍNH LIÊN THÔNG C A TH 190
4.1 NH NGH A 190
4.2 TÍNH LIÊN THÔNG TRONG TH VÔ H NG 191
4.3 TH Y VÀ THU T TOÁN WARSHALL 191
4.4 CÁC THÀNH PH N LIÊN THÔNG M NH 195
§5 VÀI NG D NG C A CÁC THU T TOÁN TÌM KI M TRÊN TH 205
5.1 XÂY D NG CÂY KHUNG C A TH 205
5.2 T P CÁC CHU TRÌNH C B N C A TH 208
5.3 NH CHI U TH VÀ BÀI TOÁN LI T KÊ C U 208
5.4 LI T KÊ KH P 214
§6 CHU TRÌNH EULER, NG I EULER, TH EULER 218
6.1 BÀI TOÁN 7 CÁI C U 218
6.2 NH NGH A 218
6.3 NH LÝ 218
6.4 THU T TOÁN FLEURY TÌM CHU TRÌNH EULER 219
6.5 CÀI T 220
6.6 THU T TOÁN T T H N 222
§7 CHU TRÌNH HAMILTON, NG I HAMILTON, TH HAMILTON 225
7.1 NH NGH A 225
7.2 NH LÝ 225
7.3 CÀI T 226
§8 BÀI TOÁN NG I NG N NH T 230
8.1 TH CÓ TR NG S 230
8.2 BÀI TOÁN NG I NG N NH T 230
8.3 TR NG H P TH KHÔNG CÓ CHU TRÌNH ÂM - THU T TOÁN FORD BELLMAN 232
8.4 TR NG H P TR NG S TRÊN CÁC CUNG KHÔNG ÂM - THU T TOÁN DIJKSTRA 234
8.5 THU T TOÁN DIJKSTRA VÀ C U TRÚC HEAP 237
8.6 TR NG H P TH KHÔNG CÓ CHU TRÌNH - TH T TÔ PÔ 240
8.7 NG I NG N NH T GI A M I C P NH - THU T TOÁN FLOYD 242
8.8 NH N XÉT 245
§9 BÀI TOÁN CÂY KHUNG NH NH T 247
9.1 BÀI TOÁN CÂY KHUNG NH NH T 247
9.2 THU T TOÁN KRUSKAL (JOSEPH KRUSKAL - 1956) 247
9.3 THU T TOÁN PRIM (ROBERT PRIM - 1957) 252
§10 BÀI TOÁN LU NG C C I TRÊN M NG 256
10.1 BÀI TOÁN 256
10.2 LÁT C T, NG T NG LU NG, NH LÝ FORD - FULKERSON 256
10.3 CÀI T 258
Trang 9v
10.4 THU T TOÁN FORD - FULKERSON (L.R.FORD & D.R.FULKERSON - 1962) 262
§11 BÀI TOÁN TÌM B GHÉP C C I TRÊN TH HAI PHÍA 266
11.1 TH HAI PHÍA (BIPARTITE GRAPH) 266
11.2 BÀI TOÁN GHÉP ÔI KHÔNG TR NG VÀ CÁC KHÁI NI M 266
11.3 THU T TOÁN NG M 267
11.4 CÀI T 268
§12 BÀI TOÁN TÌM B GHÉP C C I V I TR NG S C C TI U TRÊN TH HAI PHÍA - THU T TOÁN HUNGARI 273
12.1 BÀI TOÁN PHÂN CÔNG 273
12.2 PHÂN TÍCH 273
12.3 THU T TOÁN 274
12.4 CÀI T 278
12.5 BÀI TOÁN TÌM B GHÉP C C I V I TR NG S C C I TRÊN TH HAI PHÍA 284
12.6 NÂNG C P 284
§13 BÀI TOÁN TÌM B GHÉP C C I TRÊN TH 290
13.1 CÁC KHÁI NI M 290
13.2 THU T TOÁN EDMONDS (1965) 291
13.3 PH NG PHÁP LAWLER (1973) 293
13.4 CÀI T 295
13.5 PH C T P TÍNH TOÁN 299
TÀI LI U C THÊM 301
Trang 10vi
HÌNH V
Hình 1: Cây tìm ki m quay lui trong bài toán li t kê dãy nh phân 13
Hình 2: X p 8 quân h u trên bàn c 8x8 19
Hình 3: ng chéo B-TN mang ch s 10 và đ ng chéo N-TB mang ch s 0 19
Hình 4: L u đ thu t gi i (Flowchart) 36
Hình 5: Tháp Hà N i 49
Hình 6: C u trúc nút c a danh sách n i đ n 53
Hình 7: Danh sách n i đ n 53
Hình 8: C u trúc nút c a danh sách n i kép 55
Hình 9: Danh sách n i kép 55
Hình 10: Danh sách n i vòng m t h ng 55
Hình 11: Danh sách n i vòng hai h ng 56
Hình 12: Dùng danh sách vòng mô t Queue 61
Hình 13: Di chuy n toa tàu 63
Hình 14: Di chuy n toa tàu (2) 63
Hình 15: Cây 64
Hình 16: M c c a các nút trên cây 65
Hình 17: Cây bi u di n bi u th c 65
Hình 18: Các d ng cây nh phân suy bi n 66
Hình 19: Cây nh phân hoàn ch nh và cây nh phân đ y đ 66
Hình 20: ánh s các nút c a cây nh phân đ y đ đ bi u di n b ng m ng 67
Hình 21: Nh c đi m c a ph ng pháp bi u di n cây b ng m ng 68
Hình 22: C u trúc nút c a cây nh phân 68
Hình 23: Bi u di n cây b ng c u trúc liên k t 69
Hình 24: ánh s các nút c a cây 3_phân đ bi u di n b ng m ng 71
Hình 25: Bi u di n cây t ng quát b ng m ng 72
Hình 26: C u trúc nút c a cây t ng quát 73
Hình 27: Bi u th c d i d ng cây nh phân 74
Hình 28: Vòng l p trong c a QuickSort 89
Hình 29: Tr ng thái tr c khi g i đ quy 90
Hình 30: Heap 92
Hình 31: Vun đ ng 93
Hình 32: o giá tr k 1 cho k n và xét ph n còn l i 93
Hình 33: Vun ph n còn l i thành đ ng r i l i đ o tr k 1 cho k n-1 94
Hình 34: ánh s các bit 97
Hình 35: Thu t toán s p x p tr n 102
Hình 36: Cài đ t các thu t toán s p x p v i d li u l n 114
Hình 37: Cây nh phân tìm ki m 118
Hình 38: Xóa nút lá cây BST 119
Hình 39 Xóa nút ch có m t nhánh con trên cây BST 120
Trang 11vii
Hình 40: Xóa nút có c hai nhánh con trên cây BST thay b ng nút c c ph i c a cây con trái 120
Hình 41: Xóa nút có c hai nhánh con trên cây BST thay b ng nút c c trái c a cây con ph i 120
Hình 42: ánh s các bit 123
Hình 43: Cây tìm ki m s h c 124
Hình 44: Cây tìm ki m c s 126
Hình 45: V i đ dài dãy bit z = 3, cây tìm ki m c s g m các khoá 2, 4, 5 và sau khi thêm giá tr 7 127
Hình 46: RST ch a các khoá 2, 4, 5, 7 và RST sau khi lo i b giá tr 7 128
Hình 47: Cây tìm ki m c s a) và Trie tìm ki m c s b) 130
Hình 48: Hàm đ quy tính s Fibonacci 141
Hình 49: Tính toán và truy v t 144
Hình 50: Truy v t 153
Hình 51: Ví d v mô hình đ th 170
Hình 52: Phân lo i đ th 171
Hình 53 174
Hình 54 175
Hình 55: th và đ ng đi 177
Hình 56: Cây DFS 180
Hình 57: Cây BFS 184
Hình 58: Thu t toán loang 187
Hình 59: th G và các thành ph n liên thông G1, G2, G3 c a nó 190
Hình 60: Kh p và c u 190
Hình 61: Liên thông m nh và liên thông y u 191
Hình 62: th đ y đ 192
Hình 63: n đ th vô h ng và bao đóng c a nó 192
Hình 64: Ba d ng cung ngoài cây DFS 196
Hình 65: Thu t toán Tarjan "b " cây DFS 198
Hình 66: ánh s l i, đ o chi u các cung và duy t BFS v i cách ch n các đ nh xu t phát ng c l i v i th t duy t xong (th t 11, 10… 3, 2, 1) 204
Hình 67: th G và m t s ví d cây khung T1, T2, T3 c a nó 207
Hình 68: Cây khung DFS (a) và cây khung BFS (b) (M i tên ch chi u đi th m các đ nh) 207
Hình 69: Phép đ nh chi u DFS 210
Hình 70: Phép đánh s và ghi nh n cung ng c lên cao nh t 212
Hình 71 Duy t DFS, xác đ nh cây DFS và các cung ng c 215
Hình 72: Mô hình đ th c a bài toán b y cái c u 218
Hình 73 219
Hình 74 219
Hình 75 225
Hình 76: Phép đánh l i ch s theo th t tôpô 240
Hình 77: Hai cây g c r 1 và r 2 và cây m i khi h p nh t chúng 248
Hình 78: M ng v i các kh n ng thông qua (1 phát, 6 thu) và m t lu ng c a nó v i giá tr 7 256
Hình 79: M ng G, lu ng trên các cung (1 phát, 6 thu) và đ th t ng lu ng t ng ng 257
Hình 80: Lu ng trên m ng G tr c và sau khi t ng 258
Trang 12viii
Hình 81: th hai phía 266
Hình 82: th hai phía và b ghép M 267
Hình 83: Mô hình lu ng c a bài toán tìm b ghép c c đ i trên đ th hai phía 271
Hình 84: Phép xoay tr ng s c nh 274
Hình 85: Thu t toán Hungari 277
Hình 86: Cây pha "m c" l n h n sau m i l n xoay tr ng s c nh và tìm đ ng 285
Hình 87: th G và m t b ghép M 290
Hình 88: Phép ch p Blossom 292
Hình 89: N Blossom đ dò đ ng xuyên qua Blossom 292
Trang 13ix
P_1_02_1.PAS * Thu t toán sinh li t kê các dãy nh phân đ dài n 6
P_1_02_2.PAS * Thu t toán sinh li t kê các t p con k ph n t 8
P_1_02_3.PAS * Thu t toán sinh li t kê hoán v 9
P_1_03_1.PAS * Thu t toán quay lui li t kê các dãy nh phân đ dài n 12
P_1_03_2.PAS * Thu t toán quay lui li t kê các t p con k ph n t 14
P_1_03_3.PAS * Thu t toán quay lui li t kê các ch nh h p không l p ch p k 15
P_1_03_4.PAS * Thu t toán quay lui li t kê các cách phân tích s 17
P_1_03_5.PAS * Thu t toán quay lui gi i bài toán x p h u 21
P_1_04_1.PAS * K thu t nhánh c n dùng cho bài toán ng i du l ch 26
P_1_04_2.PAS * Dãy ABC 28
P_2_07_1.PAS * Tính giá tr bi u th c RPN 76
P_2_07_2.PAS * Chuy n bi u th c trung t sang d ng RPN 79
P_2_08_1.PAS * Các thu t toán s p x p 105
P_3_01_1.PAS * m s cách phân tích s n 135
P_3_01_2.PAS * m s cách phân tích s n 136
P_3_01_3.PAS * m s cách phân tích s n 136
P_3_01_4.PAS * m s cách phân tích s n 137
P_3_01_5.PAS * m s cách phân tích s n dùng đ quy 137
P_3_01_6.PAS * m s cách phân tích s n dùng đ quy 138
P_3_03_1.PAS * Tìm dãy con đ n đi u t ng dài nh t 144
P_3_03_2.PAS * C i ti n thu t toán tìm dãy con đ n đi u t ng dài nh t 146
P_3_03_3.PAS * Bài toán cái túi 149
P_3_03_4.PAS * Bi n đ i xâu 153
P_3_03_5.PAS * Dãy con có t ng chia h t cho k 156
P_3_03_6.PAS * Dãy con có t ng chia h t cho k 158
P_3_03_7.PAS * Nhân t i u dãy ma tr n 162
P_4_03_1.PAS * Thu t toán tìm ki m theo chi u sâu 178
P_4_03_2.PAS * Thu t toán tìm ki m theo chi u sâu không đ quy 181
P_4_03_3.PAS * Thu t toán tìm ki m theo chi u r ng dùng hàng đ i 185
P_4_03_4.PAS * Thu t toán tìm ki m theo chi u r ng dùng ph ng pháp loang 187
P_4_04_1.PAS * Thu t toán Warshall li t kê các thành ph n liên thông 194
P_4_04_2.PAS * Thu t toán Tarjan li t kê các thành ph n liên thông m nh 201
P_4_05_1.PAS * Phép đ nh chi u DFS và li t kê c u 213
P_4_05_2.PAS * Li t kê các kh p c a đ th 216
P_4_06_1.PAS * Thu t toán Fleury tìm chu trình Euler 220
P_4_06_2.PAS * Thu t toán hi u qu tìm chu trình Euler 223
P_4_07_1.PAS * Thu t toán quay lui li t kê chu trình Hamilton 226
P_4_08_1.PAS * Thu t toán Ford-Bellman 233
P_4_08_2.PAS * Thu t toán Dijkstra 235
P_4_08_3.PAS * Thu t toán Dijkstra và c u trúc Heap 237
Trang 14x
P_4_08_4.PAS * ng đi ng n nh t trên đ th không có chu trình 241
P_4_08_5.PAS * Thu t toán Floyd 243
P_4_09_1.PAS * Thu t toán Kruskal 249
P_4_09_2.PAS * Thu t toán Prim 252
P_4_10_1.PAS * Thu t toán tìm lu ng c c đ i trên m ng 259
P_4_10_2.PAS * Thu t toán Ford-Fulkerson 262
P_4_11_1.PAS * Thu t toán đ ng m tìm b ghép c c đ i 269
P_4_12_1.PAS * Thu t toán Hungari 280
P_4_12_2.PAS * Cài đ t ph ng pháp Kuhn-Munkres O(n 3 ) 286
P_4_13_1.PAS * Ph ng pháp Lawler áp d ng cho thu t toán Edmonds 296
Trang 15PH N 1 BÀI TOÁN LI T KÊ
Có m t s bài toán trên th c t yêu c u ch rõ: trong m t t p các đ i
nh t đ nh Bài toán đó g i là bài toán đ m
Trong l p các bài toán đ m, có nh ng bài toán còn yêu c u ch rõ
nh ng c u hình tìm đ c tho mãn đi u ki n đã cho là nh ng c u hình nào Bài toán yêu c u đ a ra danh sách các c u hình có th có g i là
bài toán li t kê
gi i bài toán li t kê, c n ph i xác đ nh đ c m t thu t toán đ có
th theo đó l n l t xây d ng đ c t t c các c u hình đang quan tâm
tri n c a máy tính đi n t , b ng ph ng pháp li t kê, nhi u bài toán t
h p đã tìm th y l i gi i Qua đó, ta c ng nên bi t r ng ch nên dùng
ph ng pháp li t kê khi không còn m t ph ng pháp nào khác
tìm ra l i gi i Chính nh ng n l c gi i quy t các bài toán th c t
ngành toán h c
Trang 16V y có th đ ng nh t f v i dãy giá tr (f(1), f(2), …, f(k)) và coi dãy giá tr này c ng là m t ch nh
h p l p ch p k c a S Nh ví d trên (E, C, E) là m t ch nh h p l p ch p 3 c a S D dàng ch ng
S ch nh h p l p ch p k c a t p g m n ph n t :
k k
1.2 CH NH H P KHÔNG L P
Khi f là đ n ánh có ngh a là v i ∀i, j ∈ X ta có f(i) = f(j) ⇔ i = j Nói m t cách d hi u, khi dãy giá
tr f(1), f(2), …, f(k) g m các ph n t thu c S khác nhau đôi m t thì f đ c g i là m t ch nh h p không l p ch p k c a S Ví d m t ch nh h p không l p (C, A, E):
i 1 2 3 f(i) C A E
S ch nh h p không l p ch p k c a t p g m n ph n t :
)!
kn(
!n)1kn) (
2n)(
1n(n
Akn
−
=+
Khi k = n M t ch nh h p không l p ch p n c a S đ c g i là m t hoán v các ph n t c a S
Ví d : m t hoán v : (A, D, C, E, B, F) c a S = {A, B, C, D, E, F}
i 1 2 3 4 5 6 f(i) A D C E B F
ý r ng khi k = n thì s ph n t c a t p X = {1, 2, …, n} đúng b ng s ph n t c a S Do tính
ch t đôi m t khác nhau nên dãy f(1), f(2), …, f(n) s li t kê đ c h t các ph n t trong S Nh v y f
là toàn ánh M t khác do gi thi t f là ch nh h p không l p nên f là đ n ánh Ta có t ng ng 1-1
Trang 17Bài toán li t kê
Lê Minh Hoàng
Pn =
1.4 T H P
L y m t t p con k ph n t c a S, xét t t c k! hoán v c a t p con này D th y r ng các hoán v đó
là các ch nh h p không l p ch p k c a S Ví d l y t p {A, B, C} là t p con c a t p S trong ví d trên thì: (A, B, C), (C, A, B), (B, C, A), … là các ch nh h p không l p ch p 3 c a S i u đó t c là khi li t kê t t c các ch nh h p không l p ch p k thì m i t h p ch p k s đ c tính k! l n V y:
S t h p ch p k c a t p g m n ph n t :
)!
kn(k
!n
!k
AC
k n k
S t p con c a t p n ph n t :
n n n 1
n 0
Trang 19Bài toán li t kê
Lê Minh Hoàng
Th t đó g i là th t t đi n trên các dãy đ dài n
thêm vào cu i dãy a ho c dãy b nh ng ph n t đ c bi t g i là ph n t ∅ đ đ dài c a a và b b ng nhau, và coi nh ng ph n t ∅ này nh h n t t c các ph n t khác, ta l i đ a v xác đ nh th t t
đi n c a hai dãy cùng đ dài Ví d :
(1, 2, 3, 4) < (5, 6)
(a, b, c) < (a, b, c, d)
'calculator' < 'computer'
M t dãy nh phân đ dài n là m t dãy x = x1x2…xn trong đó xi ∈ {0, 1} (∀i : 1 ≤ i ≤ n)
D th y: m t dãy nh phân x đ dài n là bi u di n nh phân c a m t giá tr nguyên p(x) nào đó n m trong đo n [0, 2n
- 1] S các dãy nh phân đ dài n = s các s nguyên ∈ [0, 2n
x2, …, xn) là dãy đang có và không ph i dãy cu i cùng thì dãy k ti p s nh n đ c b ng cách c ng thêm 1 ( theo c s 2 có nh ) vào dãy hi n t i
Trang 20K t qu ra (Output): ghi ra file v n b n BSTR.OUT các dãy nh phân đ dài n
Assign(f, OutputFile); Rewrite(f);
FillChar(x, SizeOf(x), 0); {C u hình ban đ u x 1 = x 2 = … = x n := 0}
repeat {Thu t toán sinh}
for i := 1 to n do Write(f, x[i]); {In ra c u hình hi n t i}
WriteLn(f);
i := n; {xi là ph n t cu i dãy, lùi d n i cho t i khi g p s 0 ho c khi i = 0 thì d ng}
while (i > 0) and (x[i] = 1) do Dec(i);
Trang 21Bài toán li t kê
Lê Minh Hoàng
7
C th : gi i h n trên c a x i = n - k + i;
Còn t t nhiên, gi i h n d i c a x i (giá tr nh nh t x i có th nh n) là x i-1 + 1
Nh v y n u ta đang có m t dãy x đ i di n cho m t t p con, n u x là c u hình k t thúc có ngh a là
t t c các ph n t trong x đ u đã đ t t i gi i h n trên thì quá trình sinh k t thúc, n u không thì ta
con k ph n t nào chen gi a chúng khi s p th t t đi n
V y k thu t sinh t p con k ti p t t p đã có x có th xây d ng nh sau:
Tìm t cu i dãy lên đ u cho t i khi g p m t ph n t xi ch a đ t gi i h n trên n - k + i
Trang 22Assign(f, OutputFile); Rewrite(f);
for i := 1 to k do x[i] := i; {x1 := 1; x 2 := 2; … ; x 3 := k (C u hình kh i t o)}
i := k; {xi là ph n t cu i dãy, lùi d n i cho t i khi g p m t x i ch a đ t gi i h n trên n - k + i}
while (i > 0) and (x[i] = n - k + i) do Dec(i);
Nh v y hoán v đ u tiên s là (1, 2, …, n) Hoán v cu i cùng là (n, n-1, … , 1)
Hoán v s sinh ra ph i l n h n hoán v hi n t i, h n th n a ph i là hoán v v a đ l n h n hoán v
hi n t i theo ngh a không th có m t hoán v nào khác chen gi a chúng khi s p th t
Gi s hoán v hi n t i là x = (3, 2, 6, 5, 4, 1), xét 4 ph n t cu i cùng, ta th y chúng đ c x p gi m
Trang 23Bài toán li t kê
Lê Minh Hoàng
9
h n hoán v hi n t i! Nh v y ta ph i xét đ n x2 = 2, thay nó b ng m t giá tr khác Ta s thay
b ng giá tr nào?, không th là 1 b i n u v y s đ c hoán v nh h n, không th là 3 vì đã có x1 =
3 r i (ph n t sau không đ c ch n vào nh ng giá tr mà ph n t tr c đã ch n) Còn l i các giá tr
4, 5, 6 Vì c n m t hoán v v a đ l n h n hi n t i nên ta ch n x2 = 4 Còn các giá tr (x3, x4, x5, x6)
s l y trong t p {2, 6, 5, 1} C ng vì tính v a đ l n nên ta s tìm bi u di n nh nh t c a 4 s này gán cho x3, x4, x5, x6 t c là (1, 2, 5, 6) V y hoán v m i s là (3, 4, 1, 2, 5, 6)
(3, 2, 6, 5, 4, 1) → (3, 4, 1, 2, 5, 6)
Ta có nh n xét gì qua ví d này: o n cu i c a hoán v đ c x p gi m d n, s x5 = 4 là s nh nh t trong đo n cu i gi m d n tho mãn đi u ki n l n h n x2 = 2 N u đ i ch x5 cho x2 thì ta s đ c x2
trong đo n cu i thì ta ch c n đ o ng c đo n cu i
Trong tr ng h p hoán v hi n t i là (2, 1, 3, 4) thì hoán v k ti p s là (2, 1, 4, 3) Ta c ng có th coi hoán v (2, 1, 3, 4) có đo n cu i gi m d n, đo n cu i này ch g m 1 ph n t (4)
V y k thu t sinh hoán v k ti p t hoán v hi n t i có th xây d ng nh sau:
• Xác đ nh đo n cu i gi m d n dài nh t, tìm ch s i c a ph n t x i đ ng li n tr c đo n cu i
đó i u này đ ng ngh a v i vi c tìm t v trí sát cu i dãy lên đ u, g p ch s i đ u tiên th a mãn x i < x i+1 N u toàn dãy đã là gi m d n, thì đó là c u hình cu i
i := n - 1;
while (i > 0) and (x i > x i+1 ) do i := i - 1;
• Trong đo n cu i gi m d n, tìm ph n t x k nh nh t tho mãn đi u ki n x k > x i Do đo n
cu i gi m d n, đi u này th c hi n b ng cách tìm t cu i dãy lên đ u g p ch s k đ u tiên tho mãn x k > x i (có th dùng tìm ki m nh phân)
k := n;
while x k < x i do k := k - 1;
• i ch x k và x i , l t ng c th t đo n cu i gi m d n (t x i+1 đ n x k ) tr thành t ng d n
Input: file v n b n PERMUTE.INP ch a s nguyên d ng n ≤ 12
Output: file v n b n PERMUTE.OUT các hoán v c a dãy (1, 2, …, n)
Trang 24ch ng trình li t kê dãy nh phân c ng nh trong ch ng trình li t kê hoán v , tr ng h p k = 0 đ i
v i ch ng trình li t kê t h p, hãy kh c ph c đi u đó
Trang 25Bài toán li t kê
Lê Minh Hoàng
11
Tên: Tên[1] := 'Nguy n v n A'; Tên[2] := 'Tr n th B';… sau đó li t kê t t c các t p con k ph n t
c a t p {1, 2, …, n} Ch có đi u khi in t p con, ta không in giá tr s {1, 3, 5} mà thay vào đó s in
ra {Tên[1], Tên [3], Tên[5]} T c là in ra nh c a các giá tr tìm đ c qua ánh x
Bài 5
m t ph n t đ c ch n trong t p Ví d v i t p {1, 2, 3, 4} thì dãy nh phân 1010 s t ng ng v i
t p con {1, 3} Hãy l p ch ng trình in ra t t c các t p con c a {1, 2, …, n} theo hai ph ng pháp Bài 6
Nh p vào danh sách tên n ng i, in ra t t c các cách x p n ng i đó vào m t bàn
Bài 7
Nh p vào danh sách n b n nam và n b n n , in ra t t c các cách x p 2n ng i đó vào m t bàn tròn,
m i b n nam ti p đ n m t b n n
Bài 8
m t cách khác là li t kê t t c các t p con k ph n t c a t p h p, sau đó in ra đ k! hoán v c a nó Hãy vi t ch ng trình li t kê các ch nh h p không l p ch p k c a {1, 2, …, n} theo c hai cách Bài 9
Li t kê t t c các hoán v ch cái trong t MISSISSIPPI theo th t t đi n
Bài 10
tích là hoán v c a nhau ch tính là m t cách
p n u nh ch a có c u hình th p - 1, ch ng t r ng ph ng pháp sinh t ra u đi m trong tr ng
lúc nào c ng d tìm đ c, không ph i k thu t sinh c u hình k ti p cho m i bài toán đ u đ n gi n
nh trên (Sinh các ch nh h p không l p ch p k theo th t t đi n ch ng h n) Ta sang m t chuyên
ph c t p h n đó là: Thu t toán quay lui (Back tracking)
Trang 26Chuyên đ
i h c S ph m Hà N i, 1999-2002
12
§3 THU T TOÁN QUAY LUI
Thu t toán quay lui dùng đ gi i bài toán li t kê các c u hình M i c u hình đ c xây d ng
(x1, x2, , xn) b ng cách th cho x1 nh n l n l t các giá tr có th V i m i giá tr th gán cho x1 l i
li t kê ti p c u hình n - 1 ph n t (x2, x3, …, xn)
Mô hình c a thu t toán quay lui có th mô t nh sau:
{Th t c này th cho x i nh n l n l t các giá tr mà nó có th nh n}
procedure Try(i: Integer);
<Ghi nh n vi c cho x i nh n giá tr V (N u c n)>;
Try(i + 1); {G i đ quy đ ch n ti p x i+1 }
<N u c n, b ghi nh n vi c th x i := V, đ th giá tr khác>;
end;
end;
end;
Thu t toán quay lui s b t đ u b ng l i g i Try(1)
Input/Output v i khuôn d ng nh trong P_1_02_1.PAS
Bi u di n dãy nh phân đ dài N d i d ng (x1, x2, …, xn) Ta s li t kê các dãy này b ng cách th dùng các giá tr {0, 1} gán cho xi V i m i giá tr th gán cho xi l i th các giá tr có th gán cho
xi+1.Ch ng trình li t kê b ng thu t toán quay lui có th vi t:
P_1_03_1.PAS * Thu t toán quay lui li t kê các dãy nh phân đ dài n program BinaryStrings;
const
Trang 27Bài toán li t kê
Lê Minh Hoàng
Trang 28P_1_03_2.PAS * Thu t toán quay lui li t kê các t p con k ph n t program Combination;
Trang 29Bài toán li t kê
Lê Minh Hoàng
15
N u đ ý ch ng trình trên và ch ng trình li t kê dãy nh phân đ dài n, ta th y v c b n chúng
ch khác nhau th t c Try(i) - ch n th các giá tr cho x i , ch ng trình li t kê dãy nh phân ta
th ch n các giá tr 0 ho c 1 còn ch ng trình li t kê các t p con k ph n t ta th ch n x i là m t trong các giá tr nguyên t x i-1 + 1 đ n n - k + i Qua đó ta có th th y tính ph d ng c a thu t toán quay lui: mô hình cài đ t có th thích h p cho nhi u bài toán, khác v i ph ng pháp sinh tu n t ,
v i m i bài toán l i ph i có m t thu t toán sinh k ti p riêng làm cho vi c cài đ t m i bài m t khác, bên c nh đó, không ph i thu t toán sinh k ti p nào c ng d cài đ t
3.3 LI T KÊ CÁC CH NH H P KHÔNG L P CH P K
li t kê các ch nh h p không l p ch p k c a t p S = {1, 2, …, n} ta có th đ a v li t kê các c u hình (x1, x2, …, xk) đây các xi ∈ S và khác nhau đôi m t
Nh v y th t c Try(i) - xét t t c các kh n ng ch n xi - s th h t các giá tr t 1 đ n n, mà các giá
Sau khi g i đ quy tìm xi+1: có ngh a là s p t i ta s th gán m t giá tr khác cho xi thì ta s đ t giá
tr j v a th đó thành t do (cj := TRUE), b i khi xi đã nh n m t giá tr khác r i thì các ph n t
đ ng sau: xi+1, xi+2 … hoàn toàn có th nh n l i giá tr j đó i u này hoàn toàn h p lý trong phép xây d ng ch nh h p không l p: x1 có n cách ch n, x2 có n - 1 cách ch n, …L u ý r ng khi th t c Try(i) có i = k thì ta không c n ph i đánh d u gì c vì ti p theo ch có in k t qu ch không c n ph i
Trang 30Assign(f, OutputFile); Rewrite(f);
FillChar(c, SizeOf(c), True); {T t c các s đ u ch a b ch n}
Try(1); {Th các cách ch n giá tr c a x1 }
Close(f);
end
Nh n xét: khi k = n thì đây là ch ng trình li t kê hoán v
3.4 BÀI TOÁN PHÂN TÍCH S
3.4.1 Bài toán
nguyên d ng, các cách phân tích là hoán v c a nhau ch tính là 1 cách
3.4.2 Cách làm:
Ta s l u nghi m trong m ng x, ngoài ra có m t m ng t M ng t xây d ng nh sau: ti s là t ng các
ph n t trong m ng x t x1 đ n xi: ti := x1 + x2 + … + xi
Trang 31Bài toán li t kê
Lê Minh Hoàng
17
Khi li t kê các dãy x có t ng các ph n t đúng b ng n, đ tránh s trùng l p ta đ a thêm ràng bu c
xi-1 ≤ xi
phân tích ph i có thêm tham s cho bi t s in ra bao nhiêu ph n t
Th t c đ quy Try(i) s th các giá tr có th nh n c a xi (xi ≥ xi - 1)
Khi nào thì in k t qu và khi nào thì g i đ quy tìm ti p ?
L u ý r ng ti - 1 là t ng c a t t c các ph n t t x1đ n xi-1 do đó
Khi ti = n t c là (xi = n - ti - 1) thì in k t qu
Khi tìm ti p, xi+1 s ph i l n h n ho c b ng xi M t khác ti+1 là t ng c a các s t x1 t i xi+1 không
đ c v t quá n V y ta có ti+1 ≤ n ⇔ ti-1 + xi + xi+1 ≤ n ⇔ xi + xi + 1 ≤ n - ti - 1 t c là xi ≤ (n - ti - 1)/2
Ví d đ n gi n khi n = 10 thì ch n x1 = 6, 7, 8, 9 là vi c làm vô ngh a vì nh v y c ng không ra
M t cách d hi u ta g i đ quy tìm ti p khi giá tr x i đ c ch n còn cho phép ch n thêm m t
ph n t khác l n h n ho c b ng nó mà không làm t ng v t quá n Còn ta in k t qu ch khi
x i mang giá tr đúng b ng s thi u h t c a t ng i-1 ph n t đ u so v i n
V y th t c Try(i) th các giá tr cho xi có th mô t nh sau: (đ t ng quát cho i = 1, ta đ t x0 = 1
và t0 = 0)
Xét các giá tr c a xi t xi - 1đ n (n - ti-1) div 2, c p nh t ti := ti - 1 + xi và g i đ quy tìm ti p
Cu i cùng xét giá tr xi = n - ti-1 và in k t qu t x1đ n xi
Input: file v n b n ANALYSE.INP ch a s nguyên d ng n ≤ 30
Output: file v n b n ANALYSE.OUT ghi các cách phân tích s n
Trang 32cho không quân nào n quân nào
Ví d m t cách x p v i n = 8:
Trang 33Bài toán li t kê
Lê Minh Hoàng
19
Hình 2: X p 8 quân h u trên bàn c 8x8
3.5.2 Phân tích
hàng 1 là quân h u 1, quân h u hàng 2 là quân h u 2… quân h u hàng n là quân h u n V y m t nghi m c a bài toán s đ c bi t khi ta tìm ra đ c v trí c t c a nh ng quân h u
N u ta đ nh h ng ông (Ph i), Tây (Trái), Nam (D i), B c (Trên) thì ta nh n th y r ng:
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
1
2 3
4
5 6 7 8
Trang 34Thu t toán quay lui:
• Xét t t c các c t, th đ t quân h u 1 vào m t c t, v i m i cách đ t nh v y, xét t t c các cách đ t quân h u 2 không b quân h u 1 n, l i th 1 cách đ t và xét ti p các cách đ t quân
• Khi ch n v trí c t j cho quân h u th i, thì ta ph i ch n ô(i, j) không b các quân h u đ t
chéo N-TB(i-j) còn t do i u này có th ki m tra (aj = bi+j = ci-j = TRUE)
• Khi th đ t đ c quân h u th i vào c t j, n u đó là quân h u cu i cùng (i = n) thì ta có m t nghi m N u không:
chéo b quân h u v a đ t kh ng ch (aj = bi+j = ci-j := FALSE) đ các l n g i đ quy
ti p sau ch n cách đ t các quân h u k ti p s không ch n vào nh ng ô n m trên c t
o Sau khi g i đ quy tìm cách đ t quân h u th i + 1, có ngh a là s p t i ta l i th m t
v a th đ t kh ng ch (aj = bi+j = ci-j := TRUE) t c là c t và 2 đ ng chéo đó l i thành t do, b i khi đã đ t quân h u i sang v trí khác r i thì c t và 2 đ ng chéo đó hoàn toàn có th gán cho m t quân h u khác
Hãy xem l i trong các ch ng trình li t kê ch nh h p không l p và hoán v v k thu t đánh d u đây ch khác v i li t kê hoán v là: li t kê hoán v ch c n m t m ng đánh d u xem giá tr có t do không, còn bài toán x p h u thì c n ph i đánh d u c 3 thành ph n: C t, đ ng chéo B-TN,
đ ng chéo N- TB Tr ng h p đ n gi n h n: Yêu c u li t kê các cách đ t n quân xe lên bàn c nxn sao cho không quân nào n quân nào chính là bài toán li t kê hoán v
• Input: file v n b n QUEENS.INP ch a s nguyên d ng n ≤ 12
Trang 35Bài toán li t kê
Lê Minh Hoàng
21
QUEENS.INP
5
QUEENS.OUT (1, 1); (2, 3); (3, 5); (4, 2); (5, 4);
b: array[2 2 * max] of Boolean;
c: array[1 - max max - 1] of Boolean;
FillChar(a, SizeOf(a), True); {M i c t đ u t do}
FillChar(b, SizeOf(b), True); {M i đ ng chéo ông B c - Tây Nam đ u t do}
FillChar(c, SizeOf(c), True); {M i đ ng chéo ông Nam - Tây B c đ u t do}
Trang 36th ch n xi nó s g i đ quy đ tìm ti p xi+1 có ngh a là quá trình s duy t ti n sâu xu ng phía d i
đ n t n nút lá, sau khi đã duy t h t các nhánh, ti n trình lùi l i th áp đ t m t giá tr khác cho xi, đó chính là ngu n g c c a tên g i "thu t toán quay lui"
Bài 8
S a l i th t c in k t qu (PrintResult) trong bài x p h u đ có th v hình bàn c và các cách đ t
h u ra màn hình
Bài 9
Trang 37Bài toán li t kê
Lê Minh Hoàng
23
quân Mã xu t phát t ô đang đ ng đi qua t t c các ô còn l i c a bàn c , m i ô đúng 1 l n
Bài 10
Chuy n t t c các bài t p trong bài tr c đang vi t b ng sinh tu n t sang quay lui
Bài 11
đ ng n i 2 nút giao thông Hãy nh p d li u v m ng l i giao thông đó, nh p s hi u hai nút giao thông s và d Hãy in ra t t c các cách đi t s t i d mà m i cách đi không đ c qua nút giao thông nào quá m t l n
Trang 38M t trong nh ng bài toán đ t ra trong th c t là vi c tìm ra m t nghi m tho mãn m t s đi u ki n
nào đó, và nghi m đó là t t nh t theo m t ch tiêu c th , nghiên c u l i gi i các l p bài toán t i u
giá, tìm ra c u hình t t nh t Vi c li t kê c u hình có th cài đ t b ng các ph ng pháp li t kê: Sinh
tu n t và tìm ki m quay lui D i đây ta s tìm hi u ph ng pháp li t kê b ng thu t toán quay lui
đ tìm nghi m c a bài toán t i u
4.2 S BÙNG N T H P
Mô hình thu t toán quay lui là tìm ki m trên 1 cây phân c p N u gi thi t r ng ng v i m i nút
t ng ng v i m t giá tr đ c ch n cho xi s ng v i ch 2 nút t ng ng v i 2 giá tr mà xi+1 có
th nh n thì cây n c p s có t i 2n nút lá, con s này l n h n r t nhi u l n so v i d li u đ u vào n Chính vì v y mà n u nh ta có thao tác th a trong vi c ch n xi thì s ph i tr giá r t l n v chi phí
th c thi thu t toán b i quá trình tìm ki m lòng vòng vô ngh a trong các b c ch n k ti p xi+1,
xi+2, … Khi đó, m t v n đ đ t ra là trong quá trình li t kê l i gi i ta c n t n d ng nh ng thông tin
đã tìm đ c đ lo i b s m nh ng ph ng án ch c ch n không ph i t i u K thu t đó g i là k thu t đánh giá nhánh c n trong ti n trình quay lui
{Th t c này th ch n cho x i t t c các giá tr nó có th nh n}
procedure Try(i: Integer);
Trang 39Bài toán li t kê
Lê Minh Hoàng
BESTCONFIG - t t nhiên), ta không in k t qu ngay mà s c p nh t BESTCONFIG b ng c u hình
4.4.1 Bài toán
giao thông này đ c cho b i b ng C c p nxn, đây Cij = Cji = Chi phí đi đo n đ ng tr c ti p t thành ph i đ n thành ph j Gi thi t r ng Cii = 0 v i ∀i, Cij = +∞ n u không có đ ng tr c ti p t thành ph i đ n thành ph j
ph đúng 1 l n và cu i cùng quay l i thành ph 1 Hãy ch ra cho ng i đó hành trình v i chi phí ít
(Traveling Salesman)
4.4.2 Cách gi i
Hành trình c n tìm có d ng (x1 = 1, x2, …, xn, xn+1 = 1) đây gi a xi và xi+1: hai thành ph liên ti p trong hành trình ph i có đ ng đi tr c ti p (Cij ≠ +∞) và ngo i tr thành ph 1, không thành ph nào đ c l p l i hai l n Có ngh a là dãy (x1, x2, …, xn) l p thành 1 hoán v c a (1, 2, …, n)
Duy t quay lui: x2 có th ch n m t trong các thành ph mà x1 có đ ng đi t i (tr c ti p), v i m i cách th ch n x2 nh v y thì x3 có th ch n m t trong các thành ph mà x2 có đ ng đi t i (ngoài
x1) T ng quát: xi có th ch n 1 trong các thành ph ch a đi qua mà t x i-1 có đ ng đi tr c ti p
t i (1 ≤ i ≤ n)
đ ng đi cho t i lúc đó có < Chi phí c a c u hình BestConfig?, n u không nh h n thì th giá tr khác ngay b i có đi ti p c ng ch t n thêm Khi th đ c m t giá tr xn ta ki m tra xem xn có đ ng
đi tr c ti p v 1 không ? N u có đánh giá chi phí đi t thành ph 1 đ n thành ph xn c ng v i chi
Trang 40Sau th t c tìm ki m quay lui mà chi phí c a BestConfig v n b ng +∞ thì có ngh a là nó không tìm
th y m t hành trình nào tho mãn đi u ki n đ bài đ c p nh t BestConfig, bài toán không có l i
gi i, còn n u chi phí c a BestConfig < +∞ thì in ra c u hình BestConfig - đó là hành trình ít t n
Input: file v n b n TOURISM.INP
• m dòng ti p theo, m i dòng ghi s hi u hai thành ph có đ ng đi tr c ti p và chi phí đi trên
Output: file v n b n TOURISM.OUT, ghi hành trình tìm đ c
3 4
1 2 1 3
P_1_04_1.PAS * K thu t nhánh c n dùng cho bài toán ng i du l ch program TravellingSalesman;
C: array[1 max, 1 max] of Integer; {Ma tr n chi phí}
X, BestWay: array[1 max + 1] of Integer; {X đ th các kh n ng, BestWay đ ghi nh n nghi m}
T: array[1 max + 1] of Integer; {Ti đ l u chi phí đi t X 1 đ n X i }
Free: array[1 max] of Boolean; {Free đ đánh d u, Free i = True n u ch a đi qua tp i}