Tải bản đầy đủ (.pdf) (15 trang)

Tài liệu Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi tỉnh khối 12

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 (235.55 KB, 15 trang )

Tai lieu, luan van1 of 102.

“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi
tỉnh khối 12”
Phần I: MỞ ĐẦU
1. Lý do chọn đề tài:
Ngơn ngữ lập trình Pascal là một nội dung được đưa vào chương trình học
của bậc THPT và cũng là một nội dung được áp dụng cho các kỳ thi chọn học
sinh giỏi tỉnh, học sinh giỏi quốc gia bộ mơn tin học. Chính vì vậy cần nghiên
cứu sâu về các giải thuật để hướng dẫn cho các học sinh ôn tập một cách tốt nhất
cho các kỳ thi là một trong những mục tiêu cần đạt được của người giáo viên.
Trong các kỳ thi tuyển học sinh giỏi tỉnh khối 12 hầu hết trong các đề thi
đều có các bài toán cần sử dụng giải thuật đệ loang để giải quyết vấn đề. Đó là
một dạng bài tốn có ứng dụng khá phổ biến. Vậy nên, đã có rất nhiều tài liệu
viết về nội dung này. Tuy nhiên, theo quan điểm, cách nhìn nhận của tơi việc
phân tích các bài tốn trong đó cịn khá trừu tượng khiến người đọc khó hình
dung, khó để hiểu và khó viết chương trình.
Hiện nay, tại trường tơi việc hiểu và sử dụng giải thuật loang cịn nhiều hạn chế,
khơng những số học sinh tham gia bồi dưỡng hiểu và sử dụng được cịn rất ít mà
cả giáo viên tham gia bồi dưỡng cũng còn nhiều lúng túng khi giảng dạy phần
nội dung này. Tôi cũng là một giáo viên tham gia bồi dưỡng học sinh giỏi, tôi
nhận thấy cần nghiêm túc nghiên cứu nội dung này để đưa ra cách trình bày,
cách phân tích mới giúp người đọc dễ hiểu, dễ biết và dễ viết chương trình. Để
tạo điều kiện thuận lợi trong quá trình bồi dưỡng và qua quá trình bỗi dưỡng tôi
đã đúc rút được một số kinh nghiệm về việc trình bày, phân tích bài tốn, ứng
dụng các giải thuật loang và cài đặt một số bài toán trong các đề thi học sinh giỏi
khối 12 những năm gần đây. Với mong muốn người đọc dễ dàng tiếp cận được
vấn đề . Vì vậy tơi chọn đề tài “Ứng dụng thuật toán loang trong việc giải
quyết một số bài toán cho học sinh giỏi tỉnh khối 12”
để nghiên cứu. Hy vọng đề tài trở thành một tài liệu quý cho học sinh tham
gia bồi dưỡng và cũng là tài liệu đáng tham khảo cho quý thầy cô trong quá trình



khoa luan, tieu luan1 of 102.

1


Tai lieu, luan van2 of 102.

“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi
tỉnh khối 12”
tham gia bồi dưỡng đội tuyển học sinh giỏi tỉnh để có thể góp phần đưa về cho
đội tuyển của mình những thành tích cao nhất.
2. Mục đích nghiên cứu:
Việc “Tìm hiểu về thuật tốn loang” nhằm giúp tôi hiểu rõ hơn, sâu sắc hơn
về giải thuật loang, các bài toán ứng dụng của giải thuật và cách viết các chương
trình bằng phương pháp loang từ đó nâng cao khả năng nghiên cứu khoa học,
khả năng tự học, tự bồi dưỡng, khả năng nhận biết, suy đoán và khả năng lập
trình của bản thân. Qua đó tạo nên một tài liệu hỗ trợ học tập cho học sinh và
nâng cao kiến thức chuyên môn cho giáo viên.
3. Đối tượng nghiên cứu:
Tôi được phân công bồi dưỡng học sinh giỏi của trường nên đối tượng
nghiên cứu của tôi là học sinh các lớp chọn của khối. học sinh được chọn bồi
dưỡng học sinh giỏi của trường đối với bộ môn tin học.
4. Phạm vi nghiên cứu:
Để nghiên cứu đề tài này, phạm vi nghiên cứu là ‘‘lý thuyết về loang và các
ứng dụng của thuật toán loang để giải quyết các bài tốn trong tin học bằng ngơn
ngữ lập trình Pascal’’.
5. Giả thuyết khoa học:
Lý thuyết về loang, các ứng dụng của thuật tốn loang thực sự đóng một vai
trò quan trọng trong việc giúp học sinh định hướng, tìm ra phương pháp giải các

bài tốn ứng dụng về thuật toán loang trong các đề thi học sinh giỏi cấp tỉnh, cấp
quốc gia. Bước đầu giúp học sinh nhận dạng, phân tích và giải quyết các bài
tốn liên quan một cách hiệu quả hơn.
6. Nhiệm vụ nghiên cứu:
Nghiên cứu về cơ sở lí luận
Nghiên cứu về khái niệm, thuật toán và một số bài toán ứng dụng.
khoa luan, tieu luan2 of 102.

2


Tai lieu, luan van3 of 102.

“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi
tỉnh khối 12”
Nghiên cứu về cú pháp, câu lệnh trong ngơn ngữ lập trình Pascal để cài đặt
một số bài toán về loang.
7. Phương pháp nghiên cứu:
Sử dụng phương pháp nghiên cứu lý thuyết, phương pháp tìm kiếm, thu
thập thơng tin, tổng hợp, phân tích và so sánh, thiết kế và cài đặt chương trình.
8. Đóng góp mới của đề tài:
Về mặt khoa học: Đề tài sẽ trình bày một cách logic các khái niệm từ đơn
giản đến trừu tượng, giới thiệu, phân tích các bài tập cơ bản giúp hiểu rõ bản
chất của vấn đề, từ đó vận dụng để giải quyết các bài toán phức tạp.
Về mặt thực tiễn: Đề tài trình bày tương đối đầy đủ về khái niệm, các ví
dụ của bài tốn loang – phân tích ưu điểm của việc sử dụng thuật tốn loang. các
bài tập khá đa dạng giúp cho người đọc nắm bắt và hiểu rõ về ưu điểm của thuật
toán, cách viết và sử dụng loang trong lập trình Pascal để giải quyết các bài toán.

khoa luan, tieu luan3 of 102.


3


Tai lieu, luan van4 of 102.

“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi
tỉnh khối 12”

Phần II: GIẢI QUYẾT VẤN ĐỀ
1. Cơ sở lí luận:
Trong tin học tìm kiếm là phương pháp phổ biến để giải quyết một bài tốn.
Và trong tìm kiếm có nhiều phương pháp tìm kiếm. Tuy nhiên, khi tìm kiếm trên
đồ thị thì ta có hai cách tìm kiếm đó là: Tìm kiếm theo chiều sâu hoặc tìm kiếm
theo chiều rộng. Mỗi cách tìm có những ưu điểm riêng. Đối với tìm kiếm theo
chiều sâu ta thường sử dụng giải thuật đệ quy. Giải thuật này tương đối dễ cài
đặt, nhưng nó chỉ giải quyết được các bài tốn trên bộ dữ liệu bé. Với những bài
tốn có bộ dữ liệu lớn thì tìm kiếm theo chiều rộng – cài đặt thuật toán loang
giúp ta khắc phục được hạn chế trên này.
1.1. Khái niệm về loang
Thuật toán Loang thực chất là thuật tốn tìm kiếm theo chiều rộng trên đồ
thị (Breadth First Search). Để hiểu rõ bản chất của thuật toán này, ta xét bài toán
“Thăm các đỉnh của một đồ thị” như sau: Cho một đồ thị vô hướng G = (V,E), N
đỉnh và M cạnh (số hiệu của các đỉnh là 1, 2, …,N). Bây giờ ta đưa ra thứ tự
duyệt các đỉnh của đồ thị đã cho theo thuật tốn tìm kiếm theo chiều rộng; thứ tự
duyệt có thể bắt đầu từ một đỉnh v nào đó. Tư tưởng của thuật tốn là sử dụng
cấu trúc dữ liệu kiểu hàng đợi (QUEUE - vào trước ra trước). Phần tử được nạp
vào đầu tiên của QUEUE là đỉnh v. Sau đó cứ mỗi đỉnh p lấy ra khỏi QUEUE là
ta thăm đỉnh đó đồng thời nạp vào QUEUE những đỉnh chung cạnh với p (chỉ
nạp vào những đỉnh chưa xét đến). Quá trình trên được lặp đi lặp lại cho đến khi

nào QUEUE rỗng thì dừng.
1.2. Thuật tốn loang
Thuật tốn tìm kiếm theo chiều rộng BFS là thuật tốn tìm kiếm trong đồ
thị bằng cách tìm kiếm dựa trên 2 thao tác chính là: cho trước một đỉnh của đồ
khoa luan, tieu luan4 of 102.

4


Tai lieu, luan van5 of 102.

“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi
tỉnh khối 12”
thị và thêm các đỉnh kề với nó vào danh sách chờ duyệt. Phương pháp cài đặt
này là “lập lịch” để duyệt các đỉnh theo thứ tự duyệt ưu tiên trên chiều rộng
(đỉnh nào gần với đỉnh gốc sẽ được duyệt trước)
Vì nguyên tắc trên (đỉnh nào gần gốc sẽ được duyệt trước) nên thuật tốn
tìm kiếm theo chiều rộng BFS thường được dùng để tìm đường đi ngắn nhất
giữa các đỉnh.
Chúng ta sẽ xây dựng một danh sách chứa các đỉnh đang chờ duyệt, tại mỗi
bước chúng ta thăm đỉnh ở đầu danh sách và thêm những đỉnh kề với nó chưa có
trong danh sách chờ vào cuối danh sách.
Vì ngun tắc đó nên chúng ta có thể tổ chức danh sách chờ đó bằng cấu
trúc dữ liệu hàng đợi (Queue).
Ban đầu tất cả các đỉnh i (i = 1..n) đều đặt cờ chuaxet[i] = True. Nếu đỉnh nào
xét rồi ta đặt cờ của đỉnh đó sang trạng thái False.
Procedure BFS(v); Tìm kiếm theo chiều rộng bắt đầu từ đỉnh v
Begin
QUEUE =


; {Khởi tạo QUEUE ban đầu là rỗng}

QUEUE <= v; {Nạp đỉnh v vào QUEUE}
Chuaxet[v]:=False;{Đỉnh v nạp vào QUEUE là đã xét rồi => cờ của v là
False}
While QUEUE ≠

do

Begin
P <= QUEUE; {Lấy p từ QUEUE}
Thăm đỉnh p;
For u € Ke(p) do {Những đỉnh u chung cạnh với đỉnh p}
If Chuaxet(u) then {Nếu đỉnh u chưa xét đến}
Begin
QUEUE <= u; {Nạp u vào QUEUE}
khoa luan, tieu luan5 of 102.

5


Tai lieu, luan van6 of 102.

“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi
tỉnh khối 12”
Chuaxet[u]:=False; {Đỉnh u đã xét rồi =>cờ của u là False }
End;
End;
End;
BEGIN {Chương trình chính}

For v € V do Chuaxet[v]:=True;
For v € V do
If Chuaxet[v] then BFS(v);
END.
Người ta thường dùng dữ liệu kiểu mảng để biểu diễn cấu trúc dữ liệu kiểu hàng
đợi QUEUE và sử dụng 2 biến Dau và Cuoi để điều khiển việc nạp vào và lấy
phần tử ra (biến Dau điều khiển thao tác lấy ra, biến Cuoi điều khiển thao tác
nạp vào).
Với bài toán trên ta sử dụng mảng 1 chiều Q: Array[1..N] of Byte để biểu diễn
QUEUE. Khi đó thao tác nạp vào và lấy ra được thực hiện như sau:
FillChar(Q,SizeOf(Q),0); {Khởi tạo tất cả các phần tử của Q có giá trị 0}
Dau:=1;
Cuoi:=1;
Q[cuoi]:=v; {Ban đầu nạp đỉnh v vào Q}
Để nạp thêm đỉnh u nào đó vào Q ta thực hiện:
Cuoi:=Cuoi+1; {Hoặc dùng lệnh Inc(Cuoi)}
Q[Cuoi]:=u;
Để lấy một đỉnh p nào đó ra khỏi Q ta thực hiện:
P:=Q[Dau];
Inc(Dau);
2. Phân tích, cài đặt một số bài toán trong đề học sinh giỏi khối 12
Bài tốn 1:Tần số phát sóng
Tóm tắt:
khoa luan, tieu luan6 of 102.

6


Tai lieu, luan van7 of 102.


“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi
tỉnh khối 12”
- Cho MxN ô vuông. Mỗi ô vuông chứa tần số A hoặc B. Từ vị trí này có thể di
chuyển qua vị trí kia nếu hai ơ nằm trong vùng ơ vng có chung cạnh.
- Cho MxN ô vuông, mỗi ô vuông chứa tần số A hoặc B. Từ vị trí này có
thể di chuyển qua vị trí kia nếu hai ơ nằm trong vùng ơ vng có chung cạnh.
Kiểm tra xem tọa độ hai điểm có liên thơng hay khơng?
Phân tích:
u cầu thực chất của bài tốn là kiểm tra xem từ ơ [x1;y1] đến ơ [x2;y2] có
liên thơng với nhau hay khơng.
Ta dễ nhận thấy để biết được hai ơ có liên thơng với nhau được hay khơng
ta dùng thuật tốn loang là dễ nhất. Ta bắt dầu “loang” từ ô [x1,y1], nếu “loang”
đến được ô [x2,y2] thì liên thông, ngược lại không liên thông.
Hàng đợi phục vụ “loang” được thể hiện bởi mảng 2 chiều
Q:Array[1..2,Mmax*NMax] of Byte; hàng thứ 1 của Q để lưu thông tin chỉ số
hàng, hàng thứ 2 lưu thông tin của chỉ số cột của các ô khi nạp vào Q.
Mảng A lưu thơng tin tần số phát sóng tại 1 ô vuông.
Ban đầu k:=A[x1;y1]
Mảng B dùng để đánh dấu những ô đã “loang” đến; khi ô [i,j] được “loang”
đến thì B[i,j] được gán giá trị là True. Điều kiện để loang đến được ô [x,y] là
A[x,y] =k và B[x,y]= false
Sau khi thực hiện xong việc “loang”, nếu B[x2,y2] = True thì điều đó có nghĩa
là từ ơ [x1,y1] liên thông đến ô [x2,y2] ngược lại là không liên thông.
Đoạn Code chính của chương trình.
While not eof(f) do
Begin
Fillchar(b,sizeof(b),fales);
Readln(f,x1,y1,x2,y2);
K:= A[x1;y1];
B[x1;y1]:=true;

khoa luan, tieu luan7 of 102.

7


Tai lieu, luan van8 of 102.

“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi
tỉnh khối 12”
Dau:=1;
Cuoi:=1;
Q[1;dau]:=x1;
Q[2;dau]:=y1;
While (dau<=cuoi) do
Begin
I:= q[1;dau];
J:=q[2;dau];
Dau:=dau+1;
If (i<>x2) or (j<>y2) then
Begin
For r:=1 to 4 do
Begin
X:= i+hang[r];
Y:= j+cot[r];
If (a[x;y]=k) and (not B[x;y]) then
Begin
Cuoi:=cuoi+1;
Q[1;cuoi]:=x;
Q[2;cuoi]:=y;
B[x;y]:=true;

If B[x2,y2] then break;
End;
End;
End;
End;
If not B[x2,y2] then writeln(g,0) else writeln(1);
End;

khoa luan, tieu luan8 of 102.

8


Tai lieu, luan van9 of 102.

“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi
tỉnh khối 12”
Bài tốn 2: Nơng trại
Tóm tắt:
- Cho MxN ô vuông. Mỗi ô chứa một kí tự: kí tự “.” là ơ trống, kí tự ‘#’ là hàng rào, kí tự
“c” là gà, kí tự “f” là cáo. Một miền được gọi là liên thông nếu không đi qua ô có rào
chắn. Cần đưa ra số gà và số cáo của trại biết rằng: Trong mỗi miền liên thông, nếu số gà
lớn hơn số cáo thì số cáo bằng 0 ngược lại số gà bằng 0.
Phân tích: Yêu cầu thực chất của bài toán là kiểm tra xem trong mỗi miền liên
thơng sau một đêm cịn lại bao nhiêu gà, bao nhiêu cáo.
Ta dễ nhận thấy để xác định miền liên thơng ta dùng thuật tốn loang là
thuận tiện nhất. Khi xét đến ơ (x,y) nếu A[x,y]= “.” Thì đẩy vào hàng đợi, nếu
A[x,y]= “c” tăng biến gà rồi đẩy vào hàng đợi, nếu A[x,y]= “f” tăng biến cáo và
đẩy vào hàng đợi. lặp đi lặp lại cho đến khi hàng đợi rỗng.
Hàng đợi phục vụ “loang” được thể hiện bởi mảng 2 chiều

Q:Array[1..2,Mmax*NMax] of Byte; hàng thứ 1 của Q để lưu thông tin chỉ số
hàng, hàng thứ 2 lưu thông tin của chỉ số cột của các ô khi nạp vào Q.
Mảng A lưu thông tin kí tự tại 1 ô vuông.
Ban đầu k:=A[x1;y1]
Mảng B dùng để đánh dấu những ô đã “loang” đến; khi ô [i,j] được “loang”
đến thì B[i,j] được gán giá trị .là True. Điều kiện để loang đến được ô [x;y] là
A[x;y] =k và B[x;y]= false
Sau khi thực hiện xong việc “loang”, nếu B[x2,y2] = True thì điều đó có nghĩa
là từ ơ [x1;y1] liên thông đến ô [x2;y2] ngược lại là không liên thơng.

Đoạn code chính của chương trình
Procedure loang(sx,sy);
Var localF, localC: integer;
Procedure tham(x,y:integer);
Var d:integer;
khoa luan, tieu luan9 of 102.

9


Tai lieu, luan van10 of 102.

“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi
tỉnh khối 12”
Begin
Case A[x,y] of
begin
‘#’: Exit;
‘f’: localF:= localF+1;
‘c’: localC:=localC+1;

End;
A[x,y]:=’#’;
For d:=1 to 4 do
Tham(x+dx[d], y+d[y]);
End;
Begin
LocalF:=0;
LocalC:=0;
Tham(sx,sy);
If localC>localF then nC:=nC+loaclC
else nF:=nF+localF;
End;
Procedure solve;
Var
i, j: integer;
begin
nF:=0; nC:=0;
For i:= 1 to m do
For j:= 1 to n do
If A[i,j] <> ‘#’ then loang(i, j);
End;

khoa luan, tieu luan10 of 102.

10


Tai lieu, luan van11 of 102.

“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi

tỉnh khối 12”
Bài toán 3: Đường đi của Robot (Đề thi HSG lớp 12 năm học 2009 - 2010,
Tỉnh Hà Tĩnh)
Một bảng hình chữ nhật có kích thước MxN (M,N nguyên dương và không lớn
hơn 100) được chia thành các ô vuông đơn vị bằng các đường thẳng song song
với các cạnh. Một số ơ vng nào đó có thể đặt các vật cản. Từ một ơ vng,
Robot có thể đi đến một ơ vng kề cạnh với nó nếu ô vuông đó không có vật
cản. Hỏi rằng nếu Robot bắt đầu xuất phát từ một ơ vng khơng có vật cản
thuộc dịng K, cột L thì có thể đi đến được ơ vng khơng có vật cản thuộc dịng
H, cột O hay khơng? Nếu có thì hãy chỉ ra đường đi qua ít ơ vng nhất.
Dữ liệu vào là tệp văn bản BAI3.INP có cấu trúc:
- Dịng đầu tiên ghi các chữ số M, N, K, L, H, O. Các số ghi cách nhau ít
nhất một ký tự trống;
- M dòng tiếp theo, mỗi dòng ghi N số 1 hoặc 0 tuỳ thuộc vào ô vuông
tương ứng trong bảng hình chữ nhật nêu trên có vật cản hay khơng (ghi số 1 nếu
có vật cản); các số trên mỗi dòng ghi liên tiếp nhau.
Dữ liệu ra là tệp văn bản BAI3.OUT có cấu trúc:
Nếu Robot có thể đi được từ ơ vng thuộc dịng K, cột L đến ơ vng
thuộc dịng H, cột O thì:
- Dịng đầu tiên ghi ‘Co duong di ‘;
- Các dòng tiếp theo, mỗi dòng ghi 2 số là chỉ số dòng và chỉ số cột của các
ơ vng trong đường đi tìm được từ ô vuông thuộc dòng K, cột L đến ô vuông
thuộc dịng H, cột O mà qua ít ơ vng nhất. Hai số trên mỗi dịng ghi cách nhau
ít nhất một ký tự trống;
- Ngược lại, nếu Robot không thể đi được từ ơ vng thuộc dịng K, cột L
đến ơ vng thuộc dịng H, cột O thì ghi ‘Khong co duong di’.

Phân tích:
u cầu của bài tốn thực chất là tìm đường đi từ ơ [K,L] đến ơ [H,O] sao cho
qua ít ơ vng nhất. Ta dễ thấy thuật tốn để xử lý một cách hợp lý nhất là thuật

khoa luan, tieu luan11 of 102.

11


Tai lieu, luan van12 of 102.

“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi
tỉnh khối 12”
tốn Loang. Ta bắt dầu “loang” từ ơ [K,L], nếu “loang” đến được ơ [H,O] thì có
đường đi, ngược lại khơng có đường đi.
Hàng đợi phục vụ “loang” được thể hiện bởi mảng 2 chiều
Q:Array[1..2,Mmax*Max] of Byte; hàng thứ 1 của Q để lưu thông tin chỉ số
hàng, hàng thứ 2 lưu thông tin của chỉ số cột của các ô khi nạp vào Q.
Mảng A lưu thông tin tình trạng các ơ - có vật cản hay khơng của bảng hình chữ
nhật chứa các ơ vng.
Mảng P dùng để đánh dấu những ô đã “loang” đến; đồng thời để phục vụ cho
việc truy xuất đường đi sau này nên khi ơ [i,j] được “loang” đến thì P[i,j] được
gán giá trị là r (r là giá trị tương ứng với hướng mà ơ trước đó “loang” đến,
hướng nào tương ứng với giá trị k bao nhiêu tuỳ theo quy định, ví dụ r = 1 - sang
phải, 2 - đi xuống, 3 - sang trái, 4 - đi lên).
Sau khi thực hiện xong việc “loang”, nếu P[H,O] = 0 thì điều có có nghĩa là ơ
[H,O] chưa được “loang” đến (khơng có đường đi), nếu P[H,O] = r (r=1..4 loang theo 4 hướng) thì dựa vào hướng “loang” đến mà ta tìm được ơ trước đó,
rồi ta lại dựa vào giá trị k của ơ tìm được ta tìm được ơ trước đó nữa ... q trình
trên kết thúc khi tìm được ơ [K,L].
Sau khi “loang” xong thì giá trị các phần tử trong mảng Q khơng cịn giá trị sử
dụng nữa nên ta có thể dùng mảng Q phục vụ cho việc truy xuất kết quả.
Đoạn code của chương trình con thực hiện việc loang.
Procedure Loang;
Begin

dau:=1;
cuoi:=1;
Q[1,dau]:=k;
Q[2,dau]:=l;
Fillchar(P,sizeof(P),0); {Mảng để đánh dấu ô đã duyệt hay chưa, khác 0 là đã
duyệt rồi}
P[k,l]:=5; {Đánh dấu để những lớp sau không phải “loang” đến ô này nữa }
khoa luan, tieu luan12 of 102.

12


Tai lieu, luan van13 of 102.

“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi
tỉnh khối 12”
While dau<=cuoi do
Begin
i:=Q[1,dau];
j:=Q[2,dau];
dau:=dau+1;
If (i=h) and (j=o) then Exit;{Đến ô cần đến}
If (i>1) and (P[i-1,j]=0) and (A[i-1,j]=0) then
Begin
P[i-1,j]:=4;{o truoc do ben duoi}
cuoi:=cuoi+1;
Q[1,cuoi]:=i-1;
Q[2,cuoi]:=j;
End;
If (i

Begin
P[i+1,j]:=2;
cuoi:=cuoi+1;
Q[1,cuoi]:=i+1;
Q[2,cuoi]:=j;
End;
If (j>1) and (P[i,j-1]=0) and (A[i,j-1]=0) then
Begin
P[i,j-1]:=3;
cuoi:=cuoi+1;
Q[1,cuoi]:=i;
Q[2,cuoi]:=j-1;
End;
If (jBegin
khoa luan, tieu luan13 of 102.

13


Tai lieu, luan van14 of 102.

“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi
tỉnh khối 12”
P[i,j+1]:=1;
cuoi:=cuoi+1;
Q[1,cuoi]:=i;
Q[2,cuoi]:=j+1;
End;
End;

End;

Phần III: KẾT LUẬN VÀ KIẾN NGHỊ

1. Kết luận
 Với mục đích đã đặt ra đề tài đã làm được:
- Giới thiệu rõ thuật tốn loang.
- Trình bày thuật toán loang.
- Đưa ra các dạng bài tập thường gặp với cách giải cụ thể của các bài tập
đưa ra
 Tuy nhiên, với thời gian không nhiều và những hiểu biết còn nhiều hạn
chế nên số lượng bài tập chưa được nhiều và chưa thật sự phong phú.
2. Kiến nghị, đề xuất
Đề tài đã giới thiệu về lý thuyết, cài đặt một số bài tập cơ bản và một số
dạng bài trong các kì thi chọn học sinh giỏi. Tuy nhiên, do thời gian có hạn nên
một số lời giải đưa ra có thể chưa tối ưu, trong thời gian tới tôi sẽ cố gắng đưa ra
lời giải tối ưu hơn.
Với việc trình bày khá chi tiết, đầy đủ về lý thuyết và các bài tập vận dụng
tương đối dễ hiểu, hy vọng đề tài sẽ là tài liệu học tập tốt cho các em ôn thi học

khoa luan, tieu luan14 of 102.

14


Tai lieu, luan van15 of 102.

“Ứng dụng thuật toán loang để giải quyết một số bài toán cho học sinh giỏi
tỉnh khối 12”
sinh giỏi và cũng là tài liệu cần cho các giáo viên tham gia bồi dưỡng học sinh

giỏi các cấp.
Trong thời gian tới có thể mở rộng đề tài bằng cách bổ sung thêm các dạng
toán thường gặp, trình bày các bài tốn trong các kì thi học sinh giỏi, từ đó lập
thành menu giúp học sinh học tập thuận lợi hơn.

Phần IV. TÀI LIỆU THAM KHẢO
1. Sách giáo khoa Tin học 11. NXB Giáo dục – năm 2014
2. Hồ sĩ Đàm. Tài liệu giáo khoa chuyên Tin 1. NXB Giáo dục – năm 2009
3. Nguyễn To Thành, Lập trình nâng cao trên ngơn ngữ Pascal. . NXB Đại
học Quốc gia – năm 2000
4. Đỗ Xuân Lôi, Cấu trúc dữ liệu và giải thuật. NXB Khoa học và Kĩ thuật
– năm 1998
Lê Minh Hoàng, giải thuật và lập trình, NXB Đại học sư phạm Hà Nội – năm
1999

khoa luan, tieu luan15 of 102.

15



×