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

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

15 2,1K 40

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

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

Nội dung

MỤC LỤCPhần 1 : GIỚI THIỆU ĐỀ TÀI 1.1 Giới Thiệu Tổng Quan : Đặ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 theo luật cờ vua không kể đến

Trang 1

Lớp Cao Đẳng Tin Học 2008 Năm học 2009-2010

TRƯỜNG ĐẠI HỌC TRÀ VINH

KHOA KỸ THUẬT VÀ CÔNG NGHỆ

BỘ MÔN CÔNG NGHỆ THÔNG TIN

NIÊN LUẬN I TIN HỌC

Đề tài NL06_2009:

BÀI TOÁN “8 QUÂN HẬU”

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

Thầy Ngô Thanh Huy

Nhóm sinh viên cùng thực hiện:

Phan Thị Ngọc Nhi 210108064 Nguyễn Thành Quang 210108039 Quách Nguyễn Diễm Thu 210108063

Trang 2

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN VÀ GIÁO VIÊN CHẤM

  

Trang 3

Xin chân thành cảm ơn quý thầy cô Trường Đại học Trà Vinh đã tạo điều kiện thuận lợi cho chúng em thực hiện niên luận này.

Xin chân thành cảm ơn quý thầy cô bộ môn Công Nghệ Thông Tin đã trang bị cho chúng em những kỹ năng lập trình cơ bản.

Chúng em xin chân thành cảm ơn Thầy Ngô Thanh Huy đã tận tình hướng dẫn chúng em trong suốt thời gian thực hiện đồ án niên luận

Mặc dù đã cố gắng hoàn thành trong phạm vi và khả năng cho phép nhưng chắc chắn sẽ không tránh khỏi những thiếu sót Chúng em kính mong nhận được sự cảm thông và góp ý của quý thầy cô và các bạn.

Trang 4

MỤC LỤC

Phần 1 : GIỚI THIỆU ĐỀ TÀI

1.1 Giới Thiệu Tổng Quan :

Đặ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 (theo luật cờ vua) không kể đến màu sắc, 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

Trang 5

1.2 Giới Hạn Chương Trình :

Chương trình được thiết kế giới hạn trên bàn cờ 8x8 ô, giao diện Dos đơn giản không có sử dụng đồ họa

1.3 Mục Tiêu Cần Đạt :

Phải đặt được 8 con hậu lên bàn cờ và bảo đảm chúng không thể ăn lẫn nhau theo luật cờ vua quốc tế

Hiển thị bàn cờ với số quân cờ đã được sắp xếp Hiển thị lần lược từng ván một để dễ xem, và kiểm tra

Phải tìm ra đủ đáp án của bài toán Phải chính xác, thời gian thực thi chương trình nhanh

1.4 Hướng Giải Quyết :

Theo luật cờ vua, một hoàng hậu có thể chiếm các quân khác nằm ở cùng dòng, hay cùng cột, hay cùng đường chéo; Do đó suy ra rằng mỗi cột chỉ chứa một hoàng hậu, và việc chọn chỗ cho hoàng hậu thứ j có thể giới hạn được ở cột thứ j, và quá trình chọn vị trí cho hoàng hậu thứ j sẻ được tiến hành tìm kiếm từ dòng 0 đến dòng 7 của cột j

Dùng các hàm để đơn giản hóa việc lặp lại công việc tìm vị trí Hậu

Phần 2 : CƠ SỞ LÝ THUYẾT

2.1 Các Định Nghĩa :

• Bàn cờ là một bảng vuông 8x8, nên ta dung một mảng 2 chiều với kích thước [8,8] để tổ chức bàn cờ

• Các ô nằm theo chiều ngang là các dòng, các ô nằm dọc gọi la các cột

Trang 6

• Đường chéo chính là đường chéo mà các hiệu số dòng và cột bằng nhau

• Đường chéo phụ là đường chéo mà các tổng số dòng và cột bằng nhau

• Đườ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 ảnh minh họa đường chéo Trừ và đường chéo Cộng

Đường chéo Trừ của ô a[i][j] là đường chéo chứa các phần tử a[i-k][j-k]

khi k tăng bắt đầu từ 1 Ví dụ như hình bên dưới ta có ô a[i][j] là a[4][3] với k=1 thì ta được ô a[3][2] tương tự khi k tăng lên nữa thì ta được các

ô nằm trên cùng đường chéo với ô a[4][3] là: a[3][2],a[2][1],a[1][0]

đường chéo Trừ

0 1 2 3 4 5 6 7

0

1

2

3

4

X

Trang 7

7

đường chéo Cộng

Đường chéo Cộng của ô a[i][j] là đường chéo chứa các phần tử

a[i+k][j-k] khi k tăng bắt đầu từ 1 Ví dụ như hình bên trên ta có ô a[i][j] là a[4] [3] với k=1 thì ta được ô a[5][2] tương tự khi k tăng lên nữa thì ta được các ô nằm trên cùng đường chéo với ô a[4][3] là: a[5][2],a[6][1],a[7][0]

2.2 Thuật Toán :

Đệ qui là phương pháp tính toán dựa vào việc gọi lại hàm nhiều lần Trong đó mỗi lần gọi hàm thì các đối số trong hàm sẽ giảm đi và cuối cùng là kết thúc hàm khi không còn giá trị nào để gọi nửa tức hàm

đã tối giản

Phần 3 : PHÂN TÍCH - HIỆN THỰC

3.1 Công Cụ Lập Trình :

Ngôn ngữ lập trình C, với các phần mềm :

Visual C++

Borland C++ 3.1 Turbo C++ 3.0 Nhưng chúng em đã chọn Turbo C++ 3.0 để viết chương trình này

3.2 Giới Thiệu Chương Trình :

3.2.1 Giao diện chương trình :

Chương trình có giao diện Dos đơn giản, thân thiện, dễ dùng

Trang 8

Có những phím tắt giúp cho quá trình sử dụng được thuận tiện với các phím tắt :

Bấm ESC để thoát chương trình

Bấm phím bất kì để hiện các bàn cờ đã được sắp xếp

Trang 9

Bấm phím bất kì để lần lượt hiện các bàn cờ đã được sắp xếp.

3.2.2 Các modules chương trình con :

 Các ký hiệu được định nghĩa trong chương trình:

TRUE: có giá trị là 1

FALSE : có giá trị là 0

BOARDSIZE : có giá trị là 8

DIAGONAL (2*BOARDSIZE-1) : cách tính đường chéo

queenCol[BOARDSIZE] : vị trí thẳng đứng của con Hậu

colFree[BOARDSIZE] : xét chiều thẳng đứng có free (rỗng) hay không upFree[DIAGONAL] : xét đường chéo lên có free (rỗng) hay không

downFree[DIAGONAL] : xét đường chéo xuống có free (rỗng) hay không

 Các hàm được định nghĩa trong chương trình:

void addQueen() : đặt hậu vào vị trí, kiểm tra hậu có đặt được hay không nếu được thì gọi hàm xuất hậu (writeBoard), ngược lại thì gọi lại

Trang 10

chính nó Bước gọi lại hàm addQueen là cấu trúc đệ qui của bài Kết quả trả về dưới dạng tọa độ

void writeBoard() : là hàm xuất kết quả ra màn hình bằng thao tác chuyển từ tọa độ của addQueen sang đồ họa nhờ vào cấu trúc Switch Case, với mỗi tọa độ là một dòng, tương ứng với số con hậu đang đặt

3.3 Chương Trình và Lưu Đồ Giải Thuật :

3.3.1 Hàm addQueen()

3.3.1.1 Chương trình:

Hàm nhận giá trị là vị trí của một phần tử trong bàn cờ vua do cấu trúc duyệt mảng trong thân chương trình chính đã tạo ra Đầu tiên tăng số dòng chứa hậu lên một, tiếp theo dùng vòng lặp để duyệt từng phần tử cột trong hàng hiện tại Nếu tìm được vị trí thích hợp để đặt hậu thì thay đổi giá trị của các hàm xét đường chéo, ngang, dọc thành đã tồn tại một hậu (false)

Kế tiếp xét nếu số con hậu đã đủ tám con thì sẻ tiến hành gọi hàm

writeBoard() để in bàn cờ, ngược lại số hậu chưa đủ thì sẽ tiếp tục tìm thêm

số hậu còn thiếu bằng việc gọi lại hàm addQueen()

Việc gọi lại hàm addQueen sẽ được thực hiện n lần Đây cũng là phần đệ quy của bài toán này

Trong trường hợp hậu vừa đặt không hợp yêu cầu, tức là hậu ăn nhau thì ta phải hủy vị trí vừa đặt hậu, quay về một bước đồng thời cũng trừ

ra một con hậu hiện tại

3.3.1.2 Lưu đồ:

Trang 11

3.3.2 Hàm writeBroad()

3.3.2.1 Chương trình:

Hàm nhận giá trị là tọa độ quân hậu từ hàm addQueen() sau đó chuyển thành các kí tự hình ảnh dựa vào cấu trúc Switch Case với giá trị

T

F

F

END for (col=0;col<BOARDSIZE;col++)

Tiến hành đặt cờ a[i]

[j]=true

In kết quả ra File Gọi hàm writeBoard

queenCount

==

BOARDSIZE-1

Hàng Ngang, Dọc, Đường chéo TRỐNG T

Đệ Quy gọi lại

addQueen

BEGIN addQueen

Trang 12

tọa độ từ 0 đến 7 tương ứng.

3.3.2.2 Lưu đồ:

3.3.3 Hàm main()

3.3.3.1 Chương trình:

Chương trình khởi tạo giá trị cho bàn cờ với kích thước là 8x8 ô Tại vị trí thứ i kiểm tra xem có rổng hay không, tiếp theo thì sẽ gọi hàm addQueen() để tiến hành đạt hậu vào vị trí mới vừa tìm thấy

Hàm main sẽ kết thúc khi hàm addQueen() đã tìm ra được tất cả các trường hợp có thể đặt Hậu và đã gọi hàm in kết quả writeBoard() Dừng chương trình

for(i=0;i<BOARDSIZE;i++) BEGIN writeBoard()

switch(vị trí hậu) case “i”

END

Trang 13

Tạo bàn cờ

Gọi Hàm addQueen()

BEGIN

Duyệt Vị Trí Trống

Gọi Hàm writeBoard()

Xuất Kết Quả

Trang 14

Phần 4 : KẾT LUẬN – ĐÁNH GIÁ

4.1 Kết Quả Đạt Được :

Giải thuật tìm ra được 736 cách đặt Hậu tương ứng với 92 bàn cờ Là tất cả các giải thuật của bài toán

Thời gian xử lý của bài toán tương đối nhanh chóng, đạt được yêu cầu về phần cứng, máy tính cấu hình thấp vẫn chạy được

Có thêm kiến thức về phương pháp đệ quy, quay lùi Học được cách làm việc theo nhóm tập thể Học được cách thảo luận nhóm Nắm vững hơn phương pháp lập trình theo hàm Học thêm cách tìm kiếm thông tin trên internet

4.2 Hạn Chế :

Do hạn chế về kiến thức lập trình cũng như thời gian thực hiện chương trình nên kết quả đạt được còn nhiều hạn chế

Chưa tận dụng hết độ mạnh của C về đồ họa nên giao diện của chương trình không đẹp

Bài toán tám quân hậu có 92 lời giải khác nhau Nếu không phân biệt các lời giải là ảnh của nhau qua phép đối xứng, phép quay bàn cờ thì chúng chỉ có 12 lời giải đơn vị Chưa tìm ra được phương pháp rút gọn giải thuật hơn nữa để nâng cao chất lượng chương trình

4.3 Hướng Phát Triển :

Cần ghép thêm đồ họa để giao diện chương trình sinh động hơn

Chương trình có thể mở rộng ra thành bài toán 10 quân hậu hoặc lớn hơn nữa nhưng thời gian để đặt được hết số quân hậu vào bàn cờ là rất lâu vì phải xét quân Hậu rất nhiều lần

Có thể cho người dùng nhập số quân Hậu tùy ý

Trang 15

TÀI LIỆU THAM KHẢO

[1] Cấu trúc dữ liệu và giải thuật Đỗ Xuân Lôi Chương 3 Nhà xuất bản Khoa học và

Kỉ thuật, Hà Nội 1996

[2] Cấu trúc dữ liệu và giải thuật Đoàn Trọng Huấn Trường Đại học Trà Vinh

[3] Phương pháp giải các bài toán trong tin học Trần Đức Huyên Trang 33 – 39 Nhà xuất bản giáo duc Tháng 4 – 2001

[4] Bài giảng Nhập môn lập trình Khoa Kỹ Thuật - Công Nghệ, Đại Học Trà Vinh

[5] Một số tài liệu tham khảo trên mạng internet

Link:

http://vi.wikipedia.org/wiki/Quay_lui

http://ddth.com

http://congdongcviet.com

http://cuasotinhoc.vn

http://wikiversity.org

Ngày đăng: 03/07/2014, 10:20

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Cấu trúc dữ liệu và giải thuật. Đỗ Xuân Lôi. Chương 3. Nhà xuất bản Khoa học và Kỉ thuật, Hà Nội 1996 Khác
[2] Cấu trúc dữ liệu và giải thuật. Đoàn Trọng Huấn. Trường Đại học Trà Vinh Khác
[3] Phương pháp giải các bài toán trong tin học. Trần Đức Huyên. Trang 33 – 39. Nhà xuất bản giáo duc. Tháng 4 – 2001 Khác
[4] Bài giảng Nhập môn lập trình. Khoa Kỹ Thuật - Công Nghệ, Đại Học Trà Vinh Khác
[5] Một số tài liệu tham khảo trên mạng internet Link Khác

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w