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

Bài toán 8 quân hậu

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 (484.59 KB, 17 trang )



MỤC LỤC
MỤC LỤC ........................................................................................................................... 0

NỘI DUNG .......................................................................................................................... 1

CHƯƠNG I: TỔNG QUAN ................................................................................................ 1

I.

LỜI MỞ ĐẦU ........................................................................................................ 1

II.

MÔ TẢ BÀI TOÁN............................................................................................... 1

III.

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

IV.

HƯỚNG GIẢI QUYẾT ......................................................................................... 2

V.

KẾ HOẠCH THỰC HIỆN .................................................................................... 3

CHƯƠNG II: CƠ SỞ LÝ THUYẾT ................................................................................... 4


I.

BÀN CỜ VUA ....................................................................................................... 4

II.

ĐỆ QUY (RECURSION) ...................................................................................... 5

III.

KỸ THUẬT QUAY LUI (BACKTRACKING) ................................................... 5

CHƯƠNG III: KẾT QUẢ - ỨNG DỤNG .......................................................................... 6

I.

PHÂN TÍCH YÊU CẦU BÀI TOÁN ................................................................... 6

1.

Cài đặt cấu trúc dữ liệu tổ chức bàn cờ ......................................................... 6

2.

Cài đặt thuật toán tìm kiếm sâu kết hợp quay lui .......................................... 7

3.

Hiển thị bàn cờ sau mỗi nước đi ............................................................................ 7


II.

THIẾT KẾ GIẢI THUẬT ..................................................................................... 8

1.

Hàm LayMau ................................................................................................. 8

2.

Hàm ktdh ....................................................................................................... 8

3.

Hàm KhoiTao ................................................................................................ 8

4.

Hàm SauDatHau ............................................................................................ 9

5.

Hàm VeBanCo .............................................................................................. 9

6.

Hàm VeHau ................................................................................................... 9

7.


Hàm DatQuanHau ......................................................................................... 9

8.

Hàm Try ...................................................................................................... 10

9.

Hàm main .................................................................................................... 12

III.

GIỚI THIỆU CHƯƠNG TRÌNH ........................................................................ 13

CHƯƠNG IV: KẾT LUẬN - ĐÁNH GIÁ........................................................................ 15

I.

KẾT QUẢ ĐẠT ĐƯỢC ...................................................................................... 15

II.

HẠN CHẾ ............................................................................................................ 15

III.

HƯỚNG PHÁT TRIỂN ...................................................................................... 16

TÀI LIỆU THAM KHẢO ................................................................................................. 16



Niên luận I – Bài toán “8 quân hậu” Học kỳ II – Năm học 2010-2011

GVHD: ThS. Võ Huỳnh Trâm 1 SVTH: Trần Việt Hưng

NỘI DUNG
CHƯƠNG I: TỔNG QUAN

I. LỜI MỞ ĐẦU
Cờ vua là một trò chơi giải trí xuất hiện từ khoảng thế kỷ thứ VI và ngày càng trở
nên phổ biến trên thế giới. Bên cạnh việc chơi cờ giải trí, người ta còn suy nghĩ ra
nhiều bài toán xung quanh bàn cờ vua. Một trong những bài toán phổ biến về cờ vua
đó là bài toán “8 quân hậu”. Đây cũng là một trong nhưng bài toán nổi tiếng và quen
thuộc đối với người lập trình.
Bài toán 8 quân hậu được đưa ra vào năm 1848 bởi kỳ thủ Max Bezzel, nhiều nhà
toán học (trong đó có Gauss và Georg Cantor) đã có các công trình nghiên cứu về bài
toán này và tổng quát nó thành bài toán xếp hậu. Các lời giải đầu tiên được đưa ra bởi
Franz Nauck năm 1850, ông cũng đã tổng quát hóa bài toán này thành bài toán n quân
hậu.
Trong đề tài này, người viết sẽ cài đặt một cấu trúc dữ liệu để tổ chức bàn cờ và
cài đặt một thuật toán để máy tính tìm ra đủ 8 vị trí đặt quân hậu trên bàn cờ.

II. MÔ TẢ BÀI TOÁN
Đặt 8 quân hậu trên bàn cờ vua 8x8 sao cho không có quân hậu nào có thể tấn
công được con khác không kể đến màu sắc. Theo luật cờ vua thì một con hậu có thể
nhìn thấy những con cờ khác nằm trên hàng, hoặc cột, hoặc hai đường chéo chứa nó.
Nghĩa là phải đặt các quân hậu sao cho không có hàng, cột hoặc đường chéo nào trên
bàn cờ có hơn 1 quân hậu.

Hình 1: Hai cách đặt 8 quân hậu phù hợp điều kiện bài toán.

Niên luận I – Bài toán “8 quân hậu” Học kỳ II – Năm học 2010-2011

GVHD: ThS. Võ Huỳnh Trâm 2 SVTH: Trần Việt Hưng

III. MỤC TIÊU CẦN ĐẠT
Sau khi hoàn thành đề tài, cần đạt được những mục tiêu sau:
• Trước tiên phải hiểu được luật chơi cờ vua, cũng như cách tổ chức bàn cờ trên
thực tế.
• Nắm vững một ngôn ngữ lập trình để sử dụng giải quyết bài toán.
• Nắm vững lý thuyết cơ bản về cấu trúc dữ liệu và giải thuật để cài đặt bàn cờ
và cách đặt các quân hậu.
• Nắm vững và cài đặt được giải thuật tìm kiếm sâu kết hợp quay lui
(Backtracking) để giải quyết bài toán này.
• Hiển thị bàn cờ sau mỗi bước đi dưới dạng đồ họa.
• Dịch chương trình sang file thực thi.

IV. HƯỚNG GIẢI QUYẾT
Bất kỳ ai khi thử tìm lời giải cho bài toán tám quân hậu thường ngay lập tức bị
cuốn vào việc tìm cách đặt những con hậu lên bàn cờ một cách ngẫu nhiên, hoặc theo
một quy tắc nào đó. Và với cách nào đi nữa thì một điều chắc chắn là con hậu đặt sau
sẽ không bao giờ được nhìn thấy con hậu đã đặt trước đó. Bằng cách này, nếu may
mắn một người có thể đặt được cả tám quân hậu thỏa yêu cầu bài toán. Nếu không
may, một con hậu phải được lấy đi để đặt lại vào những chổ khác và việc tìm lời giải
được tiếp tục.
Để biểu diễn, cài đặt bàn cờ vua bằng ngôn ngữ lập trình, thoạt tiên ta nghĩ tới là
dùng mảng 2 chiều để biểu diễn vị trí từng ô vuông trong bàn cờ. Cách biểu diễn đó là
đúng, tuy nhiên trong trường hợp bài toán 8 quân hậu này, nếu ta dùng cách đó thì
không được tối ưu, sẽ dẫn tới các thao tác cồng kềnh trong việc thử các quân hậu, ở
đây ta không lập trình toàn bàn cờ vua hoàn hảo để chơi. Ta chỉ sử dụng quân hậu cho
nên chỉ cần quan tâm tới ô ở 2 giá trị, đó là ô đó có quân hậu nào khống chế (ô cấm),

hay chưa không chế (ô được phép). Nói một cách khác là một ô cờ sẽ nhận một trong
2 giá trị là cấm hay được phép, khi cài đặt vào chương trình ta sẽ dùng hai giá trị nào
đó để máy tính hiểu được hai trạng thái này.
Các bước giải quyết bài toán:
• Tại bước thứ i, ta tìm vị trí để đặt quân hậu thứ i vào ô chưa bị khống chế.
Sau đó tìm tiếp vị trí cho quân hậu thứ i+1.
• Nếu ở bước thứ i không tìm thấy vị trí đặt của quân hậu thì chúng ta phải
quay lại xét đến vị trí khác của quân hậu thứ i-1.
Niên luận I – Bài toán “8 quân hậu” Học kỳ II – Năm học 2010-2011

GVHD: ThS. Võ Huỳnh Trâm 3 SVTH: Trần Việt Hưng

• Trường hợp suy biến của bài toán là khi chúng ta đã đặt cho quân hậu thứ
8, nghĩa là cả 8 quân hậu đã được xếp trên bàn cờ và đúng với điều kiện.
Chúng ta sẽ viết một hàm Try để giải quyết bài toán này. Công việc cần làm tại
một thời điểm (một trạng thái của bàn cờ nào đó mà số quân hậu chưa đủ) là:
• Đặt thêm một con hậu vào vị trí hợp lệ.
• Gọi đệ quy để xử lý tương tự số hậu cần xử lý tiếp đã giảm 1.

V. KẾ HOẠCH THỰC HIỆN
Đề tài dự kiến hoàn thành sau 10 tuần, cụ thể như sau:
• Tìm hiểu đề tài: 1 tuần.
• Tìm hiểu cấu trúc dữ liệu và giải thuật sử dụng, vẽ lưu đồ: 2 tuần.
• Viết code và kiểm thử: 4 tuần.
• Viết báo cáo và hoàn chỉnh chương trình: 3 tuần.

Niên luận I – Bài toán “8 quân hậu” Học kỳ II – Năm học 2010-2011

GVHD: ThS. Võ Huỳnh Trâm 4 SVTH: Trần Việt Hưng


CHƯƠNG II: CƠ SỞ LÝ THUYẾT

I. BÀN CỜ VUA
• Bàn cờ vua là một bảng hình
vuông, gồm 8 dòng, và 8 cột,
tạo ra 64 ô hình vuông với các
màu đậm và nhạt xen kẽ nhau.
• Đường chéo chính là đường
chéo gồm các ô mà chỉ số
dòng và chỉ số cột bằng nhau.
• Đường chéo phụ là đường
chéo đối xứng với đường chéo
chính qua trục của bàn cờ.
• Đường chéo trừ là đường chéo
song song với đường chéo
chính.
• Đường chéo cộng là đường
chéo song song với đường
chéo phụ
Hình 2: Bàn cờ vua


Hình 3: Minh họa các khái niệm trên bàn cờ vua
Niên luận I – Bài toán “8 quân hậu” Học kỳ II – Năm học 2010-2011

GVHD: ThS. Võ Huỳnh Trâm 5 SVTH: Trần Việt Hưng

II. ĐỆ QUY (RECURSION)
Đệ quy (recursion) là phương pháp dùng trong các chương trình máy tính trong đó
có một hàm tự gọi chính nó.

Trong toán học và khoa học máy tính, các tính chất (hoặc cấu trúc) được gọi là đệ
quy nếu trong đó một lớp các đối tượng hoặc phương pháp được xác định bằng việc
xác định một số rất ít các trường hợp hoặc phương pháp đơn giản (thông thường chỉ
một) và sau đó xác định quy tắc đưa các trường hợp phức tạp về các trường hợp đơn
giản.
Một hàm được gọi là đệ quy nếu bên trong thân hàm có lệnh gọi đến chính nó.
Ví dụ: Người ta định nghĩa giai thừa của một số nguyên dương n như sau:
n!=1* 2 * 3 *…* (n-1) *n = (n-1)! *n (với 0!=1)
Như vậy, để tính n! ta thấy nếu n=0 thì n!=1 ngược lại thì n!=n * (n-1)!

III. KỸ THUẬT QUAY LUI (BACKTRACKING)
Kỹ thuật quay lui (Backtracking) như tên gọi của nó, 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 cứ 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
không thể (hoặc không nên) đi theo hướng này. Từ các điểm dừng này chúng ta quay
ngược trở lại 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.
Quy trình đó thường được cài đặt bằng một hàm đệ quy mà trong đó mỗi thể hiện
của hàm lấy thêm một biến và lần lượt gán tất cả các giá trị có thể cho biến đó, với
mỗi lần gán trị lại gọi chuỗi đệ quy tiếp theo để thử các biến tiếp theo.
Giải thuật quay lui tỏ ra hiệu quả trong những trường hợp mà ban đầu tưởng như
có rất nhiều khả năng lựa chọn, nhưng sau đó chỉ một số ít khả năng là còn sót lại sau
tiến trình kiểm tra xa hơn. Trong các bài toán xếp thời khóa biểu, chẳng hạn trong
việc tổ chức các vòng đấu thể thao, sự lựa chọn thời gian cho một số trận đấu ban đầu
thường là rất dễ, nhưng càng về sau, các ràng buộc sẽ làm giảm đáng kể các khả năng
có thể.
Trong bài toán “8 quân hậu”, ta sử dụng kỹ thuật quay lui “vét cạn”, nghĩa là phải
đi tới tất cả các điểm dừng rồi mới quay lại. Phần tiếp theo đây chúng ta sẽ tìm hiểu
cách hiện thực cụ thể cho bài toán này, để thấy được ý tưởng để quy và giải thuật

quay lui là cốt lõi của bài toán ở dạng này.

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×