Th ut toán Floy

Một phần của tài liệu Kỹ Thuật Lập Trình (Trang 125 - 132)

tìm đ ng đi ng n nh t gi a t t c các c p đnh c a đ th , chúng ta có th s d ng n l n thu t toán Ford_Bellman ho c Dijkstra (trong tr ng h p tr ng s không âm). Tuy nhiên, trong c hai thu t toán đ c s d ng đ u có đ ph c t p tính toán l n (chí ít là O(n3)). Trong tr ng h p t ng quát, ng i ta th ng dùng thu t toán Floyđ c mô t nh sau:

void Floy(){

Input: th cho b i ma tr n tr ng s a[i, j], i, j = 1, 2, . . ., n.

Output:- Ma tr n đ ng đi ng n nh t gi a các c p đnh d[i, j], i, j = 1, 2, . . .,n; d[i,j] là đ dài ng n nh t t i đ n j.

Ma tr n ghi nh n đ ng đi p[i, j], i, j = 1, 2, . . ., n

p[i, j] ghi nh n đnh đi tr c đnh j trong đ ng đi ng n nh t;*) (*b c kh i t o*)

for( i=1; i≤; i++) for( j =1; j≤n; j++) { d[i,j] = a[i, j]; p[i,j] = i; } (*b c l p *) for (k=1; k≤n; k++)

for( i=1; i≤n; i++)

for (j =1; j≤n; j++) if (d[i,j] > d[i, k] + d[k, j]) { d[i, j] = d[i, k] + d[k, j]; p[i,j] = p[k, j]; } }

B n đ c có th tìm th y nh ng cài đ t c th các thu t toán trên đ th thông qua các tài li u [1], [5].

NH NG N I DUNG C N GHI NH

X N m v ng nh ng khái ni m và đnh ngh a c b n c a đ th . X Hi u đ c các ph ng pháp bi u di n đ th trên máy tính.

X N m v ng đ c các thu t toán tìm ki m trên đ th : thu t toán tìm ki m theo chi u r ng, thu t toán tìm ki m theo chi u sâu và ng d ng c a nó trong bài toán tìm đ ng đi gi a hai đnh c a đ th c ng nh trong tính toán các thành ph n liên thông c a đ th .

X N m v ng s khác bi t gi a đ th Euler và đ th Hamilton cùng v i thu t toán tìm đ ng đi và chu trình trên các đ th Euler & Hamilton.

X N m v ng bài toán tìm cây bao trùm & tìm cây bao trùm nh nh t.

X Hi u & cài đ t nhu n nhuy n các thu t toán tìm đ ng đi ng n nh t gi a các c p đnh c a đ th tr ng s .

BÀI T P CH NG 5

Bài 1. Cho tr c ma tr n k c a đ th . Hãy vi t ch ng trình t o ra danh sách k c a đ th đó.

Bài 2. Cho tr c danh sách k c a đ th , hãy t o nên ma tr n k c a đ th .

Bài 3. M t bàn c 8×8 đ c đánh s theo cách sau:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

M i ô có th coi là m t đnh c a đ th . Hai đnh đ c coi là k nhau n u m t con vua đ t ô này có th nh y sang ô kia sau m t b c đi. Ví d : ô 1 k v i ô 2, 9, 10, ô 11 k v i 2, 3, 4, 10, 12, 18, 19, 20. Hãy vi t ch ng trình t o ma tr n k c a đ th , k t qu in ra file king.out.

Bài 4. Bàn c 8×8 đ c đánh s nh bài trên. M i ô có th coi là m t đnh c a đ th . Hai đnh đ c g i là k nhau n u m t con mã đ t ô này có th nh y sang ô kia sau m t n c đi. Ví d ô 1 k v i 11, 18, ô 11 k v i 1, 5, 17, 21, 26, 28. Hãy vi t ch ng trình l p ma tr n k c a đ th , k t qu ghi vào file ma.out.

Bài 5. Hãy l p ch ng trình tìm m t đ ng đi c a con mã trên bàn c t ô s đ n ô t (s, t đ c nh p t bàn phím).

Bài 6. Cho C s d li u ghi l i thông tin v N Tuy n bay (N<=100) c a m t hãng hàng không. Trong đó, thông tin v m i tuy n bay đ c mô t b i: i m kh i hành (departure), đi m đ n (destination), kho ng cách (lenght). Departure, destination là m t xâu kí t đ dài không quá 32, không ch a d u tr ng gi a, Length là m t s nh h n 32767.

Ta g i “Hành trình bay” t đi m kh i hành A t i đi m đ n B là dãy các hành trình [A, A1, n1], [A1, A2, n2] . . .[Ak, B,nk] v i Ai là đi m đ n c a tuy n i nh ng l i là đi m kh i

hành c a tuy n i +1, ni là kho ng cách c a tuy n bay th i (1<=i<k). Trong đó, kho ng cách c a hành trình là t ng kho ng cách c a các tuy n mà hành trình đi qua (n1+n2+. .+nk).

Cho file d li u ki u text hanhtrinh.in đ c ghi theo t ng dòng, s các dòng trong file d li u không v t quá N, trên m i dòng ghi l i thông tin v m t tuy n bay, trong đó departure, destination, length đ c phân bi t v i nhau b i m t ho c vài d u tr ng. Hãy tìm gi i pháp đ tho mãn nhu c u c a khách hàng đi t A đ n B theo m t s tình hu ng sau:

Tìm hành trình có kho ng cách bé nh t t A đ n B. In ra màn hình t ng đi m mà hành trình đã qua và kho ng cách c a hành trình. N u hành trình không t n t i hãy đ a ra thông báo “Hành trình không t n t i”.

Ví d v C s d li u hanhtrinh.in New_York Chicago 1000 Chicago Denver 1000 New_York Toronto 800 New_York Denver 1900 Toronto Calgary 1500 Toronto Los_Angeles 1800 Toronto Chicago 500 Denver Urbana 1000 Denver Houston 1500 Houston Los_Angeles 1500 Denver Los_Angeles 1000

V i đi m đi : New_York, đi m đ n : Los_Angeles ; chúng ta s có k t qu sau: Hành trình ng n nh t:

New_York to Toronto to Los_Angeles; Kho ng cách: 2600.

Bài 7. K t c thành công v i kh i l p ph ng th n bí, Rubik sáng t o ra d ng ph ng c a trò ch i này g i là trò ch i các ô vuông th n bí. ó là m t b ng g m 8 ô vuông b ng nhau nh hình 1. Chúng ta qui đnh trên m i ô vuông có m t màu khác nhau. Các màu đ c kí hi u b i 8 s nguyên t ng ng v i tám màu c b n c a màn hình EGA, VGA nh hình 1. Tr ng thái c a b ng các màu đ c cho b i dãy kí hi u màu các ô đ c vi t l n l t theo chi u kim đ ng h b t đ u t ô góc trên bên trái và k t thúc ô góc d i bên trái. Ví d : tr ng thái trong hình 1 đ c cho b i dãy các màu t ng ng v i dãy s (1, 2, 3, 4, 5 , 6, 7, 8). Tr ng thái này đ c g i là tr ng thái kh i đ u.

Bi t r ng ch c n s d ng 3 phép bi n đ i c b n có tên là ‘A’, ‘B’, ‘C’ d i đây bao gi c ng chuy n đ c t tr ng thái kh i đ u v tr ng thái b t k :

‘A’ : đ i ch dòng trên xu ng dòng d i. Ví d sau phép bi n đ i A, hình 1 s tr thành hình 2:

‘B’ : th c hi n m t phép hoán v vòng quanh t trái sang ph i trên t ng dòng. Ví d sau phép bi n đ i B hình 1 s tr thành hình 3:

‘C’ : quay theo chi u kim đ ng h b n ô gi a. Ví d sau phép bi n đ i C hình 1 tr thành hình 4:

Hình 1 Hình 2 Hình 3 Hình 4

Cho file d li u Input.txt ghi l i 8 s nguyên trên m t dòng, m i s đ c phân bi t v i nhau b i m t d u tr ng ghi l i tr ng thái đích. Hãy tìm dãy các phép bi n đ i s b n đ đ a tr ng thái kh i đ u v tr ng thái đích sao cho s các phép bi n đ i là ít nh t có th đ c.

D li u ra đ c ghi l i trong file Output.txt, dòng đ u tiên ghi l i s các phép bi n đ i, nh ng dòng ti p theo ghi l i tên c a các thao tác c b n đã th c hi n, m i thao tác c b n đ c vi t trên m t dòng.

B n s đ c thêm 20 đi m n u s d ng b ng màu thích h p c a màn hình đ mô t l i các phép bi n đ i tr ng thái c a trò ch i. Ví d v i tr ng thái đích d i đây s cho ta k t qu nh sau: Input.txt Output.txt 2 6 8 4 5 7 3 1 7 B C A B C C B

Bài 8. Cho m t m ng thông tin g m N nút. Trong đó, đ ng truy n tin hai chi u tr c ti p t nút i đ n nút j có chi phí truy n thông t ng ng là m t s nguyên A[i,j] = A[j,i], v i A[i,j]>=0, i ≠ j. N u đ ng truy n tin t nút i1đ n nút ik ph i thông qua các nút i2, . . ik-1 thì chi phí truy n thông đ c tính b ng t ng các chi phí truy n thông A[i1,i2], A[i2,i3], . . . A[ik-1,ik]. Cho tr c hai nút i và j. Hãy tìm m t đ ng truy n tin t nút i đ n nút j sao cho chi phí truy n thông là th p nh t.

1 2 3 4 8 7 6 5 8 7 6 5 1 2 3 4 4 1 2 3 5 8 7 6 1 7 2 4 8 6 3 5

D li u vào đ c cho b i file TEXT có tên INP.NN. Trong đó, dòng th nh t ghi ba s N, i, j, dòng th k + 1 ghi k-1 s A[k,1], A[k,2], . . , A[k,k-1], 1<=k<=N.

K t qu thông báo ra file TEXT có tên OUT.NN. Trong đó, dòng th nh t ghi chi phí truy n thông th p nh t t nút i đ n nút j, dòng th 2 ghi l n l t các nút trên đ ng truy n tin có chi phí truy n thông th p nh t t nút i t i nút j.

Bài 9. Cho m t m ng thông tin g m N nút. Trong đó, đ ng truy n tin hai chi u tr c ti p t nút i đ n nút j có chi phí truy n thông t ng ng là m t s nguyên A[i,j] = A[j,i], v i A[i,j]>=0, i ≠ j. N u đ ng truy n tin t nút i1đ n nút ik ph i thông qua các nút i2, . . ik-1 thì chi phí truy n thông đ c tính b ng t ng các chi phí truy n thông A[i1,i2], A[i2,i3], . . . A[ik-1,ik]. Bi t r ng, gi a hai nút b t k c a m ng thông tin đ u t n t i ít nh t m t đ ng truy n tin.

ti t ki m đ ng truy n, ng i ta tìm cách lo i b đi m t s đ ng truy n tin mà v n đ m b o đ c tính liên thông c a m ng. Hãy tìm m t ph ng án lo i b đi nh ng đ ng truy n tin, sao cho ta nh n đ c m t m ng liên thông có chi phí t i thi u nh t có th đ c.

D li u vào đ c cho b i file TEXT có tên INP.NN. Trong đó, dòng th nh t ghi s N, dòng th k + 1 ghi k-1 s A[k,1], A[k,2], . . , A[k,k-1], 1<=k<=N.

K t qu thông báo ra file TEXT có tên OUT.NN trong đó dòng th nh t ghi chi phí truy n thông nh nh t trong toàn m ng. T dòng th 2 ghi l n l t các nút trên đ ng truy n tin, m i đ ng truy n ghi trên m t dòng.

Bài 10.Cho file d li u đ c t ch c gi ng nh bài 6.6. Hãy tìm t t c các hành trình đi t đi m s đ n t.

Bài 11.Cho file d li u đ c t ch c gi ng nh bài 6.6. Hãy tìm hành trình đi t đi m s đ n t sao cho hành trình đi qua nhi u node nh t.

Bài 12.Cho file d li u đ c t ch c gi ng nh bài 6.6. Hãy tìm hành trình đi t đi m s đ n t sao cho hành trình đi qua ít node nh t.

Bài 13.Tìm hi u thu t toán leo đ i trên đ th và ng d ng c a nó trong l nh v c trí tu nhân t o.

CH姶愛NG 6: SP XP VÀ TÌM KIM (SORTING AND SEARCHING)

S p x p & tìm ki m là bài toán c b n nh t c a tin h c. Có th nói, m i t ng tác gi a con ng i và h th ng máy tính v b n ch t đ u là tìm ki m và thu th p thông tin. n sau các quá trình tìm ki m là vi c s p x p các đ i t ng theo m t tr t t nào đó đ quá trình tìm ki m di n ra nhanh nh t, chính xác và hi u qu nh t đó là ý ngh a c b n c a quá trình s p x p. N i dung chính c a ch ng này t p chung vào các gi i thu t s p x p và tìm ki m c b n d i đây:

X Gi i thu t Selection Sort, Gi i thu t Insert Sort, Gi i thu t Bubble Sort, Gi i thu t Shaker Sort, Gi i thu t Quick Sort, Gi i thu t Heap Sort, và gi i thu t Merge Sort.

X Tìm ki m tu n t (Sequential), tìm ki m nh phân (Binary Search) & tìm ki m trên cây nh phân (Binary Search).

B n đ c có th tìm th y nh ng cài đ t c th và nh ng ki n th c sâu h n trong tài li u [1] & [6].

Một phần của tài liệu Kỹ Thuật Lập Trình (Trang 125 - 132)

Tải bản đầy đủ (PDF)

(156 trang)