1. Trang chủ
  2. » Công Nghệ Thông Tin

Giai thuat va lap trinh(rat hay)

316 919 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 316
Dung lượng 12,33 MB

Nội dung

Giai thuat va lap trinh

Trang 1

LÊ MINH HOÀNG

Bài gi ng chuyên đ

i h c S ph m Hà N i, 1999-2002

Trang 3

L 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 5

i

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 6

ii

§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 7

iii

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 8

iv

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 9

v

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 10

vi

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 11

vii

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 12

viii

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 13

ix

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 14

x

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 15

PH 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 16

V 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 17

Bà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 19

Bà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 20

K 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 21

Bà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 22

Assign(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 23

Bà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 24

ch 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 25

Bà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 26

Chuyê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 27

Bài toán li t kê

Lê Minh Hoàng

Trang 28

P_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 29

Bà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 30

Assign(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 31

Bà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 32

cho không quân nào n quân nào

Ví d m t cách x p v i n = 8:

Trang 33

Bà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 34

Thu 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 35

Bà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 36

th 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 37

Bà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 38

M 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 39

Bà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 40

Sau 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}

Ngày đăng: 12/09/2013, 07:52

TỪ KHÓA LIÊN QUAN

w