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

Thuật toán quay lui DOMINO

7 3,2K 53
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 123,5 KB

Nội dung

Thuật toán quay lui DOMINO

Trang 1

Thuật toán quay lui

Trần Đình Trung

Bài 4: Bộ bài Domino với bản đồ số

Bộ bài domino gồm 28 quân đánh số từ 1 đến 28 Mỗi quân bài là một thanh hình chữ nhật được chia làm hai hình vuông bằng nhau Trong đó người ta ghi các số từ 0 (để trống) đến

6 bằng cách trổ các dấu tròn trắng Dưới đây liệt kê 28 quân bài domino:

Sắp xếp 28 quân bài domino ta có thể tạo ra một hìmh chữ nhật kích thước 7*8 ô vuông Mỗi cách sắp xếp như vậy sẽ tạo ra một bản đồ số Ngược lại, mỗi bản đồ số có thể tương ứng với một số cách xếp

Ví dụ bản đồ số:

4 2 5 2 6 3 5 4

5 0 4 3 1 4 1 1

1 2 3 0 2 2 2 2

1 4 0 1 3 5 6 5

4 0 6 0 3 6 6 5

4 0 1 6 4 0 3 0

6 5 3 6 2 1 5 3

tương ứng với hai cách xếp mô tả bởi hai bảng số sau:

16 16 24 18 18 20 12 11

06 06 24 10 10 20 12 11

08 15 15 03 03 17 14 14

08 05 05 02 19 17 28 26

23 01 13 02 19 07 28 26

23 01 13 25 25 07 21 04

Trang 2

27 27 22 22 09 09 21 04

16 16 24 18 18 20 12 11

06 06 24 10 10 20 12 11

08 15 15 03 03 17 14 14

08 05 05 02 19 17 28 26

23 01 13 02 19 07 28 26

23 01 13 25 25 07 21 04

27 27 22 22 09 09 21 04

Bài toán đặt ra là cho trước một bảnng số, hãy liệt kê tất cả các cách xếp có thể tạo ra từ nó

Dữ liệu vào từ file DOMINO.INP là ma trận 7*8 mô tả bản đồ số ban đầu

Kết quả ghi ra file DOMINO.OUT dòng đầu là số lượng p cách xếp tìm được Tiếp theo là

p nhóm dòng, mỗi nhóm gồm 7 dòng ghi các dòng của các bảng tương ứng với một bảng

số tìm được

Hướng dẫn giải

Vói mỗi quân bài domino ta có thể có hai khả năng xếp vào hình chữ nhật: hoặc là đặt nằm ngang, hoặc là đặt nằm dọc Ta sẽ thử tất cả các cách để đặt chúng vào hình chữ nhật cho đến khi nào đặt được cả 28 quân bài vào hình chữ nhật thì đó là một trong các cách xếp thoả mãn Mỗi cách xếp thoả mãn sẽ được lưu vào mảng L[1 10,1 7,1 8]

Văn bản chương trình

Program Bo_bai_domino_voi_cac_ban_do_so;

Type Bandoso = array[1 7,1 8] of byte;

Sothutu = array[0 6,0 6] of byte;

Cauhinh = array[1 10,1 7,1 8] of byte;

Const Fi = ’DOMINO.INP’;

Fo = ’DOMINO.OUT’;

D : array[1 2] of byte = (0,1);

C : array[1 2] of byte = (1,0);

Var A,B : Bandoso;

L : Cauhinh;

Gt : Sothutu;

TS : set of byte;

T,dem: byte;

F : Text;

Procedure Read_inp;

Var i,j,k : byte;

Begin

Assign(F,Fi); Reset(F); dem:= 0;

For i:= 1 to 7 do

begin

For j:= 1 to 8 do read(F,A[i,j]);

Readln(F);

Trang 3

For i:= 0 to 6 do

For j:= i to 6 do

begin

Inc(k); Gt[i,j]:= k; Gt[j,i]:= k;

end;

Close(F);

End;

Function Sott(x: byte) : String;

Var S : String;

Begin

Str(X,S);

If length(S) = 1 then S:= ’0’ + S;

Sott:= S;

End;

Procedure Result;

Var i,j : byte;

Begin

Inc(dem);

For i:= 1 to 7 do

For j:= 1 to 8 do L[dem][i,j]:= B[i,j];

End;

Procedure Try(i,j : byte);

Var k,u,v,x : byte;

Begin

While (j < 8) and (B[i,j] > 0) do inc(j);

If (j = 8) and (B[i,j] > 0) then Try(i+1,1) else For k:= 1 to 2 do

begin

u:= i + D[k]; v:= j + C[k];

If (u in [1 7]) and (v in [1 8]) and (B[u,v] = 0) then begin

x:= Gt[A[i,j],A[u,v]];

If not (x in Ts) then

begin

Inc(t); Ts:= Ts + [x];

B[i,j]:= x; B[u,v]:= x;

If t = 28 then Result else

If v = 8 then Try(i+1,1) else Try(i,v+1);

Dec(t); Ts:= Ts - [x];

B[i,j]:= 0; B[u,v]:= 0;

end

end;

Trang 4

End;

Procedure Write_out;

Var k,i,j : byte;

Begin

Assign(F,Fo); Rewrite(F);

Writeln(dem);

For k:= 1 to dem do

begin

For i:= 1 to 7 do

begin

For j:= 1 to 8 do write(F,Sott(L[dem][i,j]),’ ’);

Writeln(F);

end;

Writeln(F); Writeln(F);

end;

Close(F);

End;

BEGIN

Read_inp;

Try(1,1);

Write_out;

END

Bài 5: Robot quét vôi

Có 9 căn phòng (đánh số từ 1 đến 9) đã được quét vôi với mầu trắng, xanh hoặc vàng Có 9 rôbôt (đánh số từ 1 đến 9) phụ trách việc quét vôi các phòng Mỗi rôbôt chỉ quét vôi một số phòng nhất định Việc quét vôi được thực hiện nhờ một chương trình cài sẵn theo qui tắc:

- Nếu phòng đang có mầu trắng thì quét mầu xanh,

- Nếu phòng đang có mầu xanh thì quét mầu vàng,

- Nếu phòng đang có mầu vàng thì quét mầu trắng

Cần phải gọi lần lượt một số các rôbôt ra quét vôi (mỗi lần một rôbôt, một rôbôt có thể gọi nhiều lần và có thể có rôbôt không được gọi Rôbôt được gọi sẽ quét vôi tất cả các phòng

mà nó phụ trách) để cuối cùng các phòng đều có mầu trắng Hãy tìm một phương án như vậy sao cho lượng vôi phải quét là ít nhất Giả thiết rằng luợng vôi cho mỗi lượt quét đối với các phòng là như nhau

Dữ liệu: đọc từ file văn bản ROBOT.INP gồm các dòng:

- 9 dòng đầu, mỗi dòng mô tả danh sách các phòng được quét vôi bởi một rôbôt theo thứ tự

từ rôbôt 1 đến rôbôt 9 Mỗi dòng như vậy gồm các số hiệu phòng viết sát nhau Chẳng hạn dòng thứ 3 có nội dung: 2356 mô tả rôbôt 3 phụ trách việc quét vôi các phòng 2, 3, 5, 6

- Dòng cuối mô tả mầu vôi ban đầu của các phòng Dòng gồm 9 ký tự viết sát nhau, ký tự thứ i biểu diễn mầu vôi của phòng i với quy ước: ký tự T chỉ mầu trắng, ký tự X chỉ mầu xanh, ký tự V chỉ mầu vàng

Kết quả: đưa ra file văn bản ROBOT.OUT gồm một dòng dưới dạng:

Trang 5

- Nếu không có phương án thì ghi một chữ số 0,

- Trái lại ghi dãy thứ tự các rôbôt được gọi (các số hiệu rôbôt viết sát nhau)

Ví dụ

Hướngdẫn giải

Ta sẽ giải bài toán bằng cách duyệt theo cây tìm kếm Với mỗi con robot ta có thể không gọi hoặc sẽ gọi tối đa là hai lần, do đó là sẽ có ba cách lựa chọn Ta sẽ lần lượt duyệt các danh sách để gọi các con robot Vì có tất cả 9 danh sách nên ta phải duyệt tối đa là 39 cách gọi Do bài toán đòi hỏi là lượng vôi ít nhất nên ta sẽ tìm cách gọi nào là tối ưu nhất Để giảm bớt số lần duyệt ta có thể dùng thêm cận để kiểm tra điều kiện có thực hiện tiếp hay không Nếu ở bước thứ i ta cần gọi là S robot là số lần gọi tối ưu lúc đó là Min thì nếu S > min thì ta có thể nhánh này của cây và quay lại bước thứ i − 1, nếu S < min thì ta có thể tiếp tục đuyệt

Bài 6: Nhà du hành vũ trụ

Một nhà du hành vũ trụ bị lạc vào một hành tinh được thống trị bởi các con robot Giả sử hành tinh được chia thành một mảng hình chữ nhật các ô vuông kích thước M X N ( M,N ≤ 8) Tất cả mọi con robot đều tìm cách tiến lại nhà du hành để tiêu diệt, còn nhà du hành thì tìm cách tránh xa các con robot Cứ sau một dơn vị thời gian nhà du hành có thể đi theo 4 hướng Đông, Tây, Nam, Bắc hoặc đứng yên Tất cả các con robot được lập trình đi theo 1 trong 8 hướng kể cả đường chéo sao cho khoảng cách từ con robot đến nhà du hành là nhỏ nhất (khoảng cách này không lớn hơn khoảng cách ở thời điểm trước) trong đó đường chéo được tính theo công thức hình học thông thường Các con robot luôn chuyển động theo nhịp thời gian

Nếu hai con robot cùng đến một ô thì cả hai con robot này bị nổ tung và để lại trên ô đó một nhiệt độ huỷ diệt được duy trì mãi và nhiệt độ này đủ để phá huỷ các con robot hoặc

nhà du hành chẳng may đặt chân lên ô đó Ô này trở thành nguy hiểm.

Tất cả các con robot không được lập trình để tránh các ô nguy hiểm hoặc tránh đụng độ nhau mà chỉ được lập trình để gần nhà du hành một cách máy móc

Khi một hoặc nhiều robot cùng du hành ở cùng một ô vuông thì nhà du hành bị tiêu diệt Nhà du hành không thể đi tới một ô đang có robot

Bài toán đặt ra:cho bản đồ của hành tinh (có vị trí của nhà du hành và các con robot), hãy tìm cách di chuyển nhà du hành theo một lịch trình sao cho nhà du hành có thể tồn tại lâu nhất trên hành tinh (thông báo trường hợp nhà du hành tồn tại mãi mãi trên hành tinh)

Trang 6

Dữ liệu vào có trong file văn bản DUHANH.INP có cấu trúc:

- Dòng đầu tiên chứa hai số M và N,

- Trong M dòng tiếp theo chứa bản đồ của hành tinh: mỗi dòng chứa một xâu văn bản (đặt ngay từ đầu dòng) gồm các kí tự ’0’, ’1’, ’2’ với ý nghĩa sau:

’0’: ô rỗng ’1’: ô có một robot ’2’: ô có nhà du hành

Kết quả được in ra màn hình và ghi vào văn bản DUHANH.OUT có nội dung như sau:

- Dòng đầu ghi số đơn vị thời gian nhà du hành tồn tại trên hành tinh (quy ước ghi −1 nếu anh ta tồn tại mãi mãi)

- ứng với mỗi thời điểm có M dòng trên file output bản đồ hành tinh trong lịch trình, mỗi thời điểm cách nhau một dòng trống

Ví dụ: Phần đầu của một lịch trình được thể hiên như sau:

Ví dụ:

Trang 7

Hướng dẫn giải

Sau mỗi bước hoặc robot gần người thêm một dơn vị khoảng cách hoặc không gian bị hạn

chế thêm một đơn vị độ dài cả về chiều rộng lẫn chiều dài, do đó ta đi đến khẳng định: nếu

người tồn tại sau K = Min{M,N} bước thì người tồn tại mãi mãi hay nếu người bị robot ăn thịt thì không thể tồn tại sau K bước di chuyển.

Với khẳng định trên đây lặp không quá K bước trong đó mỗi bước lặp liên quan đến việc thực hiện 5 cách đi trong bước Như vậy tổng số bước không vượt quá 5 K thuật toán

Để lưu trữ về tình trạng bản đồ của hành tinh ta dùng mảng A[1 K,1 M,1 N] Sau mỗi bước thử cách đi cho nhà du hành ta sẽ sử dụng một thủ tục để cho các con robot di chuyển tiến lại gần nhà du hành

Ngày đăng: 11/09/2012, 15:25

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w