You are on page 1of 21

TRƯỜNG ĐẠI HỌC CẦN THƠ

KHOA CÔNG NGHỆ THÔNG TIN




BÁO CÁO NIÊN LUẬN 1

Đề tài : Bài Toán “Quân Mã Đi Tuần”

Giáo Viên Hướng Dẫn : Sinh Viên Thực Hiện :


Ths.VÕ HUỲNH TRÂM NGUYỄN CHÍ LÝ
MSSV : CT0856M035
LỚP : TH08
CẦN THƠ – 2010

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 2
LỜI CẢM ƠN
----
----

Bài báo cáo này đến nay đã được hoàn thành. Có được kết quả này
trước hết cho em gửi lời cảm ơn chân thành đến toàn thể thầy giáo, cô giáo
– những người đã trang bị cho em những kiến thức quý báu trong quá trình
học lời cảm ơn chân thành nhất.

Đặc biệt em xin bày tỏ lòng biết ơn sâu sắc cô Ths.Võ Huỳnh Trâm –
Cán bộ giảng dạy môn Công Nghệ Phần Mềm Trường Đại Học Cần Thơ,
người đã tận tình, trực tiếp giúp đỡ và hướng dẫn để em sớm hoàn thành bài
báo cáo này.

Vì điều kiện học tập giới hạn nên bài báo cáo này không tránh khỏi
những sai lầm thiếu sót, em rất mong được sự đóng góp của quý thầy cô và
các bạn.

Em xin chân thành cảm ơn !

Cần thơ, ngày 02 tháng 11 năm 2010


NHẬN XÉT CỦA GIÁO VIÊN
 

................................................................................................................
................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

Cần thơ, ngày…...tháng…..năm 2010

Giáo viên hướng dẫn

VÕ HUỲNH TRÂM
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

MỤC LỤC
-------  ϑ -------
Lời cảm tạ
Nhận xét của giáo viên hướng dẫn
Mục lục
CHƯƠNG I : GIỚI THIỆU
Giới thiệu tổng quan...............................................................................5
Mục tiêu cần đạt......................................................................................5
Phạm vi của đề tài & phương pháp giải quyết.........................................5
CHƯƠNG II : CƠ SỞ LÝ THUYẾT
I.Các hàm và các lệnh cơ bản trong C, C++ .........................................6
II Đệ quy...............................................................................................10
III. Giải thuật vét cạn............................................................................12
IV. Kĩ thuật quay lui.............................................................................14
CHƯƠNG III : ỨNG DỤNG
Lưu đồ giải thuật...................................................................................15
CHƯƠNG IV : KẾT LUẬN – ĐÁNH GIÁ
I. Kết quả đạt được................................................................................16
II. Hạn chế.............................................................................................16
III. Hướng phát triển.............................................................................16
CHƯƠNG V : PHỤ LỤC
I. Hướng dẫn cài đặt chương trình.........................................................17
II. Hướng dẫn sử dụng..........................................................................17
.........................................................................18
........................................................................19
 Tài liệu tham khảo

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 5
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

CHƯƠNG I : GIỚI THIỆU


I. GIỚI THIỆU TỔNG QUAN:

- Ngày nay, do nhu cầu tiếp cận với công nghệ thông tin ngày càng cao
và nhu cầu ứng dụng công nghệ vào đời sống ngày càng rộng rãi. Cung cấp
những thông tin và những phương tiện để phục vụ mục đích khác nhau của
mình. Do đó các dữ liệu trao đổi được máy tính tận dụng tối đa, và dần dần
máy tính có thể thay con người làm việc, thay con người suy nghĩ. Trong đó để
máy tính có thể suy nghĩ một cách thông minh và nhanh hơn bao giờ hết, chúng
ta có thể tạo ra một chương trình để giao tiếp với máy tính đó là “Ngôn Ngữ
Lập Trình C”.
- Đề tài này sử dụng “Ngôn Ngữ Lập Trình C” , lập trình sao cho Quân
Mã trong cờ vua có thể đi tuần (đi hết bàn cờ 8x8).

II. MỤC TIÊU CẦN ĐẠT:

- Thiết kế một chương trình nhằm tìm ra lời giải một cách nhanh chóng,
giúp quân mã có thể đi tuần hết bàn cờ vua, tìm nước đi kế tiếp bằng cách chọn
một trong những ô có thể đặt quân mã hợp lệ tiếp theo trong bàn cờ và làm đến
khi không còn ô trống và quân mã còn có thể đi được.

III. PHẠM VI CỦA ĐỀ TÀI VÀ HƯỚNG GIẢI QUYẾT:

1. Phạm vi nội dung của đề tài:


- Trên bàn cờ 8x8, một quân mã được phép đi theo luật cờ vua, vị trí đầu
tiên của quân mã được đặt tại một ô nào đó. Hãy tìm cách di chuyển quân mã
qua tất cả các ô của bàn cờ sao cho mỗi ô chỉ được đi qua một lần duy nhất.

2. Về lý thuyết:
- Nắm vững các kiến thức lý thuyết cơ bản về cấu trúc dữ liệu và giải
thuật.
- Giải thuật đệ quy.
- Giải thuật vét cạn.

3. Về chương trình:
- Cài đặt cấu trúc dữ liệu và tổ chức bàn cờ, khởi tạo ngẫu nhiên vị trí
đặt quân mã, cài đặt chương trình theo kiểu vét cạn mọi khả năng có thể xảy ra.
Tìm ra lời giải một cách nhanh chóng. Hiển thị bàn cờ.

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 6
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

Chương II:

CƠ SỞ LÝ THUYẾT
 

I .CÁC HÀM VÀ CÁC LỆNH CƠ BẢN TRONG C, C++ :


- Như ở phần giới thiệu chúng ta đã đề cập đến ngôn ngữ C, và chương
trình chúng ta viết trên C, nên chúng ta cần nắm được các hàm và các lệnh
trong C,
1.Cấu trúc của một chương trình C, C++ :

#include <stdio.h>

void main ()
{
Printf(“chuong trinh ma đi tuan!");
return 0;
}

- Đây là một trong những chương trình đơn giản nhất có thể viết bằng C+
+ nhưng nó đã bao gồm những phần cơ bản mà mọi chương trình C++ có.
- Ở đây câu lệnh #include <stdio.h> báo cho trình dịch biết cần
phải "include" thư viện stdio. Đây là một thư viện vào ra cơ bản trong C và nó
phải được "include" vì nó sẽ được dùng trong chương trình

Intmain()
- Dòng này tương ứng với phần bắt đầu khai báo hàm main. Hàm main
là điểm mà tất cả các chương trình C bắt đầu thực hiện. Nó không phụ thuộc
vào vị trí của hàm này (ở đầu, cuối hay ở giữa của mã nguồn) mà nội dung của
nó luôn được thực hiện đầu tiên khi chương trình bắt đầu. Thêm vào đó, do
nguyên nhân nói trên, mọi chương trình C đều phải tồn tại một hàm main.

Printf( "chuong trinh ma đi tuan!");

- Dòng lệnh này làm việc quan trọng nhất của chương trình. printf là một
dòng (stream) output chuẩn trong C được định nghĩa trong thư viện stdio

và những gì mà dòng lệnh này làm là gửi chuỗi kí tự "chuong trinh ma đi


tuan!" ra màn hình.

return 0;

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 7
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

Lệnh return kết thúc hàm main và trả về mã đi sau nó, trong trường hợp
này là 0. Đây là một kết thúc bình thường của một chương trình không có một
lỗi nào trong quá trình thực hiện.

2. Cấu trúc điều kiện: if và else

- Cấu trúc if + else có thể được móc nối để kiểm tra nhiều giá trị. Ví dụ
sau đây sẽ kiểm tra xem giá trị chứa trong biến x là dương, âm hay bằng không.

if (x > 0)
printf( "x is positive");
else if (x < 0)
printf( "x is negative");
else
printf( "x is 0");

3.Vòng lặp while :

- Vòng lặp while giống như vòng lặp for, dùng để lặp lại một công việc
nào đó cho đến khi điều kiện sai.
Cú pháp:
while (Biểu thức điều kiện)

<Công việc>

Lưu đồ:
- <Công việc>: được thể hiện bằng 1
Đ Sai câu lệnh hay 1 khối lệnh.
Kiện - Kiểm tra Biểu thức điều kiện trước.
- Nếu điều kiện sai (=0) thì thoát khỏi
Đúng lệnh while.
- Nếu điều kiện đúng (!=0) thì thực
Công việc hiện công việc rồi quay lại kiểm tra điều
kiện tiếp.
Thoát
Lưu ý:
- Lệnh while gồm có biểu thức điều kiện và thân vòng lặp (khối lệnh thực
hiện công việc)
- Vòng lặp dừng lại khi nào điều kiện sai.

- Khối lệnh thực hiện công việc có thể rỗng, có thể làm thay đổi điều kiện.

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 8
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

4.Vòng lặp for :

- Vòng lặp xác định thực hiện lặp lại một số lần xác định của một (chuỗi
hành động)

 Cú pháp lệnh:

for (biểu thức 1; biểu thức 2; biểu thức 3)


khối lệnh;

Lưu đồ : Begi
n

Tính giá trị


` Biểu thức 1

S
Biểu thức 2 End

Đ
Công
việc

Tính giá trị


Biểu thức 3

Giải thích:

<Công việc>: được thể hiện là 1 câu lệnh hay 1 khối lệnh. Thứ tự thực
hiện của câu lệnh for như sau:
B1: Tính giá trị của biểu thức 1.
B2: Tính giá trị của biểu thức 2.
- Nếu giá trị của biểu thức 2 là sai (=0): thoát khỏi câu lệnh for.
- Nếu giá trị của biểu thức 2 là đúng (!=0): <Công việc> được thực hiện.
B3: Tính giá trị của biểu thức 3 và quay lại B2.
*Một số lưu ý khi sử dụng câu lệnh for:
• Từ for phải được viết bằng chữ thường .
• Nếu khối lệnh bao gồm từ 2 lệnh trở lên thì phải đặt trong cặp {} .

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 9
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

+ Biểu thức 1: khởi tạo giá trị ban đầu cho biến điều khiển.
+ Biểu thức 2: là quan hệ logic thể hiện điều kiện tiếp tục vòng lặp.
+ Biểu thức 3: phép gán dùng thay đổi giá trị biến điều khiển.
+ Nếu biểu thức 2 không có, vòng for được xem là luôn luôn đúng, muốn
thoát khỏi vòng lặp for phải dùng một trong 3 lệnh break, goto hoặc return.
+ Với mỗi biểu thức có thể viết thành một dãy biểu thức con phân cách
nhau bởi dấu phẩy. Khi đó các biểu thức con được xác định từ trái sang phải.
Tính đúng sai của dãy biểu thức con trong biểu thức thứ 2 được xác định bởi
biểu thức con cuối cùng.
+ Trong thân for (khối lệnh) có thể chứa một hoặc nhiều cấu trúc điều
khiển khác.
+ Khi gặp lệnh break, cấu trúc lặp sâu nhất sẽ thoát ra.
+ Trong thân for có thể dùng lệnh goto để thoát khỏi vòng lặp đến vị trí
mong muốn.
+ Trong thân for có thể sử dụng return để trở về một hàm nào đó.

5.Cấu trúc switch …case :


- Chọn thực hiện 1 trong n lệnh cho trước .
Cú pháp lệnh:

switch (biểu thức)


{ case giá trị 1 : lệnh 1;
break;
case giá trị 2 : lệnh 2;
break;
}

• Từ khóa switch, case, break : phải được viết bằng chữ thường .

Biểu thức phải là có kết quả là giá trị hằng nguyên ( char, int, long…)

Lệnh 1, 2…n có thể gồm nhiều lệnh, nhưng không cần đặt trong dấu
ngoặc kép .

6. Lệnh break :
Cú pháp: break
- Dùng để thoát khỏi vòng lặp. Khi gặp câu lệnh này trong vòng lặp,
chương trình sẽ thoát ra khỏi vòng lặp và chỉ đến câu lệnh liền sau nó. Nếu
nhiều vòng lặp --> break sẽ thoát ra khỏi vòng lặp gần nhất. Ngoài ra, break
còn được dùng trong cấu trúc lựa chọn switch.

7.Mảng :

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 10
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

- Là tập hợp các phần tử có cùng dữ liệu. Giả sử bạn muốn lưu n số
nguyên để tính trung bình, bạn không thể khai báo n biến để lưu n giá trị rồi sau
đó tính trung bình.
Cách khai báo mảng
const H[]={-2,-1,1,2, 2, 1,-1,-2}; Khai báo mảng không bao hàm kích
thước,Khi đó trình biên dịch sẽ đếm số mục trong danh sách khởi tạo và dùng
con số đó làm kích thước mảng
int a[12][12]; : Với int là kiểu mảng, a là tên mảng, với số phần tử của
mảng là 12 x 12 .

II.ĐỆ QUI:
1.Khái niệm về thuật toán đệ quy:
- Các hàm (chương trình) có thể gọi chính nó. Hiện nay đệ quy được sử
dụng rộng rãi trong C, C++ và 1 số các chương trình khác, bởi vì khi sử dụng
đệ quy người lập trình có thể lập trình cho chương trình chạy ít tốn thời gian .
Điều này có thể có ích với một số tác vụ như là một số phương pháp sắp xếp
hay tính giai thừa của một số.
Ví dụ: để tính giai thừa của một số (n), công thức toán học của nó như
sau:

n! = n * (n-1) * (n-2) * (n-3) ... * 1


và một hàm đệ qui để tính toán sẽ như sau :

#include <iostream.h>
long factorial (long a)
{
if (a > 1)
return (a * factorial (a-1));
else
return (1);
}

int main ()
{
long l;
printf("Type a number: ");
scanf(%d,&l);
printf(" l = ");
factorial (l);
return 0;
}
- Hàm này có một hạn chế là kiểu dữ liệu mà nó dùng (long) không cho
phép tính giai thừa quá 12!

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 11
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

2. Đệ quy khoa học máy tính:


- Có một phương pháp chung để giải các bài toán là chia bài toán thành
các bài toán con đơn giản hơn cùng loại. Phương pháp này được gọi là kỹ thuật
lập trình chia để trị. Chính nó là chìa khóa để thiết kế nhiều giải thuật quan
trọng, là cơ sở của quy hoạch động.
- Một ví dụ cổ điển của đệ quy là hàm giai thừa cho bằng giải mã trong C
hoặc C++ sau đây:
function factorial(n)
{
if (n <= 1)
return 1;
else
return n * factorial(n-1);
}
- Một ví dụ khác của giải thuật đệ quy là thủ tục duyệt(nghĩa là thực hiện
một công việc nào đó với chúng) tất cả các nút của một cấu trúc dữ liệu cây:

procedure ProcessTree(node)
{
ProcessNode(node); // thực hiện một thuật
toán riêng với nút đầu
for each child_node of node do
ProcessTree(child_node);
}

- Để duyệt một cây, gọi thủ tục này với nút gốc của cây như một tham
biến khởi tạo. Tiêp theo, thủ tục gọi đệ quy đến chính nó cho tất cả các nút con
của nút vừa gọi (nghĩa là các cây con của cây vừa gọi), cho đên khi gặp trường
hợp cơ bản nghĩa là nút không có con (thường gọi là “lá”).

- Chính cấu trúc cây cũng được định nghĩa bằng đệ quy như sau:

struct node
{
child_nodes : list<node>;
...
}
struct tree
{
root : node;
...
}

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 12
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

- Cây được biểu diễn bằng một nút gốc và danh sách các nút con của nút
ấy. Mỗi nút con lại có danh sách các nút con của nó. (và như vậy, nó là gốc của
một cây con). "Lá" với danh sách rỗng các nút con là trường hợp cơ sở của nút.

3.Chương trình con đệ qui:

a.Trong lập trình, ta có khái niệm:

- Một chương trình con (hàm,thủ tục) được gọi là đệ qui nếu
trong quá trình thực hiện nó có phần phải gọi đến chính nó.

b. Cấu trúc chính của một chương trình con đệ qui:

- Một chương trình con đệ qui căn bản gồm hai phần.

Phần cơ sở: chứa các tác động của hàm hoặc thủ tục với một số giá trị cụ
thể ban đầu của tham số.

Phần đệ qui: định nghĩa tác động cần được thực hiện cho giá trị hiện thời
của các tham số bằng các tác động đã được định nghĩa trước đây với kích
thước tham số nhỏ hơn.

Ví dụ:

Hàm tính giai thừa của n (tính n!):

Void gt()

{int n;

if (n == 0)

return gt=1;

else

return gt== n*gt(n-1);

III. GIẢI THUẬT VÉT CẠN.

1. Định nghĩa:

- Trong bàn cờ vua 8x8 giải thuật vét cạn được nói đến là xét các
khả năng có thể xảy ra để quân mã đi hết tất cả các ô trên bàn cờ. Vì là quét cạn

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 13
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

nên chương trình sẽ chạy rất lâu vì trong bài toán “Quân mã đi tuần” có rất
nhiều lời giải cho 1 tọa độ đặt quân mã. Từ 1 toạ độ của quân mã có nhiều nhất
là 8 hướng đi.

- Giả sử tại điểm K quân mã có 8 hướng đi thì quá trình vét cạn diễn ra
với tổng số là 864. Đây là con số rất lớn,để tính được quá trình này máy tính cần
phải tốn 1 lượng thời gian khá lớn .

- Ngoài ra chúng ta còn có 1 giải thuật vét cạn khác đó là:

2.Giải thuật vét cạn thông minh:

- Trong một bài toán tìm kiếm nào đó, khi không gian tìm kiếm lớn, ta
thường tìm cách giới hạn lại không gian tìm kiếm hoặc thực hiện một kiểu dò
tìm đặc biệt dựa vào đặc thù của bài toán để nhanh chóng tìm ra mục tiêu.
Nghĩa là khi chọn được một hứơng thích hợp thì quân mã sẽ đi tiếp và sẽ
không xét tiếp những hướng đi khác. Như vậy quá trình vét cạn diễn ra nhanh
chóng và số lời giải cho bài toán được rút ngắn xuống, quá trình sẽ diễn ra
nhanh hơn so với giải thuật ban đầu.

- Đối với bài toán “ Quân mã đi tuần ” ta áp dụng giải thuật “Vét Cạn “thì
là 1 phương án tốt chứ chưa hẳn là tối ưu vì một phương án tối ưu thì kết quả
phải chính xác và thời gian phải tiết kiệm nhất. Khi áp dụng vào bài toán này ta
sẽ xét các hướng đi của quân mã trên bàn cờ ( quân mã sẽ đi theo 8 hướng
khác nhau ) và trong số các hướng đi đó sẽ thỏa mãn 2 trường hợp sau đây:

- Không đi đủ 64 ô (không thành công) trong trường hơp này giải thuật
vét cạn sẽ làm cho chương trình của chúng ta mất rất nhiều thời gian và đối với
các chương trình thì việc tốn thời gian không phải là giải pháp tối ưu.

- Đi đủ 64 ô ( thành công ): Trong trường hợp này quân sẽ tìm hướng đi


thích hơp cho mỗi nước đi để hoàn thành công việc.

- Ở bài toán này, mục đích là "tìm ra một cách đi tuần qua 64 ô", không
phải là tất cả các cách đi. Theo như phân tích ban đầu, nếu 1 ô càng gần biên và

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 14
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

trong góc thì có số nước đi ở bước tiếp theo càng ít. Vì vậy người ta cho rằng
nên đi như sau:

*Cách 1: Ở bước kế, ta nên nhảy vào ô nào mà nó càng gần góc càng tốt.

*Cách 2: Ở bước kế, nên nhảy vào ô nào mà ô đó có số nước có thể đi ở


nước tiếp theo nữa là ít nhất.

IV. KĨ THUẬT QUAY LUI

1. Định nghĩa :
- Kĩ thuật quay lui (backtracking) như tên gọi của nó, kĩ thuật quay lui là
một quá trình phân tích đi xuống và quay lui trở lại theo con đường đã đi qua.

- Tại mỗi bước phân tích chúng ta chưa giải quyết được vấn đề do còn
thiếu dữ liệu nên cứ phải phân tích cho tới các điểm dừng, nơi chúng ta xác
định được lời giải của chúng hoặc là xác định được là không thể (hoặc không
nên) tiếp tục theo hướng này. Từ các điểm dừng này chúng ta quay ngược trở
lại theo con đường mà chúng ta đã đi qua để giải quyết các vấn đề còn tồn đọng
và cuối cùng ta sẽ giải quyết được vấn đề ban đầu.

- Ở đây chúng ta sẽ có 3 kĩ thuật quay lui: “vét cạn” là kĩ thuật phải đi tới
tất cả các điểm dừng rồi mới quay lui. “Cắt tỉa Alpha-Beta” và “Nhánh-Cận” là
hai kĩ thuật cho phép chúng ta không cần thiết phải đi tới tất cả các điểm dừng,
mà chỉ cần đi đến một số điểm nào đó và dựa vào một số suy luận để có thể
quay lui sớm. Các kĩ thuật này sẽ được trình bày thông qua một số bài toán cụ
thể sau.

2. Kĩ thuật quay lui vét cạn :

- Trong các ngôn ngữ lập trình đều có các biểu thức số học, việc dịch các
biểu thức này đòi hỏi phải đánh giá (định trị) chúng. Ðể làm được điều đó cần
phải có một biểu diễn trung gian cho biểu thức. Một trong các biểu diễn trung
gian cho biểu thức là cây biểu thức.
- Cây biểu thức số học là một cây nhị phân, trong đó các nút lá biểu diễn
cho các toán hạng, các nút trong biểu diễn cho các toán tử.
Ví dụ : Biểu thức 5 + 2 * 3 - 4
- Trị của một nút lá chính là trị của toán hạng mà nút đó biểu diễn. Trị của
một nút trong có được bằng cách lấy toán tử mà nút đó biểu diễn áp dụng vào
các con của nó.
- Trị của nút gốc chính là trị của biểu thức.
- Như vậy để định trị cho nút gốc, chúng ta phải định trị cho hai con của
nó, đối với mỗi con ta xem nó có phải là nút lá hay không, nếu không phải ta
lại phải xét hai con của nút đó. Quá trình cứ tiếp tục như vậy cho tới khi gặp
các nút lá mà giá trị của chúng đã được biết, quay lui để định trị cho các nút

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 15
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

cha của các nút lá và cứ như thế mà định trị cho tổ tiên của chúng. Ðó chính là
kĩ thuật quay lui vét cạn, vì chúng ta phải lần đến tất cả các nút lá mới định trị
được cho các nút trong và do thế mới định trị được cho nút .

Chương IV: ỨNG DỤNG


Lưu đồ giải thuật

Bắt đầu

Nhập vị trí đầu tiên quân mã i,j


snd=1
số nước đi (i,j)=1

S
Kiểm tra dữ liệu nhập
i<=8,j<=8

Đ
Tìm vị trí đặt mã kế tiếp

int a[8]={-2,-1,1,2,2,1,-1,-2},
int b[8]={1,2,2,1,-1,-2,-2,-1}

Tìm một điểm hợp lệ


có số nước phát sinh là
ít nhất

1<=u) && (u<=n) && (1<=v) && (v<=n) && (h[u][v]==0


(cột=v,dòng=u,bàn cờ=h)

đặt quân mã
snd++

snd = 64

Đ
GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý
In ra
Trang 16
Kết thúc
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 17
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

CHƯƠNG V: KẾT LUẬN – ĐÁNH GIÁ

I. KẾT QUẢ ĐẠT ĐƯỢC:


- Chương trình dễ sử dụng với người dụng.
- Đáp ứng được yêu cầu đặt ra, với cách tìm lời giải nhanh.
- Giao diện đơn giản.

II. HẠN CHẾ:


- Do giới hạn về kiến thức, chưa nắm vững về lập trình và đây là lần
đầu tiên làm Niên Luận nên em chưa đủ kinh nghiệm cũng như chưa thể thiết
kế chương trình tối ưu và hoàn thiện, một số lỗi về giao diện.

III. HƯỚNG PHÁT TRIỂN:


- Khắc phục những hạn chế của chương trình.
- Để chương trình hoàn thiện hơn ta có thể chuyển chương trình sang
ngôn ngữ Java, viết trên môi trường Windows để có thể tận dụng được các hổ
trợ của Windows.
- Giao diện màn hình khá đơn giản cần phát triển đồ họa thêm nữa.

Em trân thành mong nhận được sự góp ý và giúp đỡ của thầy cô và


các bạn !!!.

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 18
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

Chương V: PHỤ LỤC


GIỚI THIỆU DEMO CHƯƠNG TRÌNH
I. HƯỚNG DẪN CÀI ĐẶT CHƯƠNG TRÌNH
• Cài đặt chương trình Bordland C++ vào ổ C (Chương trình có sẵn
trong CD).
• Copy file MDTUAN.cpp từ đĩa CD vào ổ đĩa C.

II. HƯỚNG DẪN SỬ DỤNG


- Sau khi cài xong Borland C++ vào đường dẫn C:\BORLANDC\BIN
trong thư mục BIN nhấn chọn BC.exe để mở chương trình.Chọn đường dẫn
đến file MDTUAN.cpp (xem hình 1.1)

(Hình 1.1)

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 19
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

 Click vào menu Run chọn Run CTRL + F9 để chạy chương trình
hoặc sử dụng tổ hợp phím CTRL +F9 để chạy chương trình. (xem hình 1.2)

(Hình 1.2)

 Xuất hiện màn hình Dos ,nhập vị trí quân mã vào hàng và cột
(xem hình 1.3)

(Hình 1.3)

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 20
Niên luận 1_02 Bài Toán “Quân Mã Đi Tuần”

 Ta nhập vào vị trí 0 0 bàn cờ xuất hiện,quân mã sẽ chạy từ 1 cho


đến hết 64 ô của bàn cờ. (Xem hình 1.4)

(Hình 1.4)

 TÀI LIỆU THAM KHẢO

1.http://vi.wikipedia.org/wiki/B%C3%A0i_to%C3%A1n_t%C3%A1m_qu%C3%A2n_h
%E1%BA%ADu

2. A. Aho, J. Ullman, Data Structures and Algorithms

3. Wirth, Chương trình = Cấu trúc dữ liệu + Giải thuật

4. Nguyễn Trung Trực, Cấu trúc dữ liệu - ĐHBK tp HCM

5. Robert Sedgewick, Cẩm nang thuật toán 1,2

GVHD: Ths. Võ Huỳnh Trâm SVTH: Nguyễn Chí Lý

Trang 21

You might also like