160 likes | 338 Views
Trường CĐ Công Nghệ Thủ Đức. Giảng Viên : Nguyễn Thị Vân Môn : Phân Tích và Thiết Kế Giải Thuật Nhóm : 1 Chủ Đề : Bài Toán n Quân Hậu Thành Viên : Lý Anh Cường Nguyễn Minh Thuận. I. Bài toán n quân hậu.
E N D
Trường CĐ CôngNghệThủĐức GiảngViên :NguyễnThịVân Môn : Phân Tích và ThiếtKếGiảiThuật Nhóm : 1 ChủĐề:BàiToánn Quân Hậu ThànhViên: LýAnhCường Nguyễn Minh Thuận
I. Bài toán n quân hậu Bài toán nquân hậu là bài toán đặt n quânhậu trên bàn cờvua kích thước n × n sao cho không có quân hậu nào có thể "ăn" được quân hậu khác VíDụ Bài toán 4 quân hậu
II. Tínhchấtsốhọccủalờigiải Ký hiệu quân hậu đứng ở ô nằm trên hàng thứ i của lời giải là Q[i, j] i j 1 2 3 4 1 i + j = const 2 i – j = const 3 4 Vì thế ta gọi các đường chéo song song với đường chéo chính là đường chéo trừ, các đường chéo song song với đường chéo phụ là đường chéo cộng.
III. Xây dựng nhanh mộtlờigiải Các bước tìm VíDụ Bài toán 4 quân hậu B1: Chia n cho 12 lấy số dư r. B1 B2 B2: Viết lần lượt các số chẵn từ 2 – n. Nếu số dư là 3 hoặc 9 thì chuyển 2 xuống cuối danh sách r = 4 4 % 12 = 4 2 4 Nếu r = 3 hoặc r = 9 2 4 6 8 … 4 6 8 … 2
III. Xây dựng nhanh mộtlờigiải Các bước tìm VíDụ B3 B3: Bổ sung lần lượt các số lẻ từ 1 đến n vào cuối danh sách. Nếu r= 8 thì đổi chỗ từng cặp, còn nếu r = 2 thì đổi chỗ 1 và 3 và chuyển 5 xuống cuối danh sách và nếu r = 3 hoặc r = 9, chuyển 1 và 3 xuống cuối danh sách 2 4 1 3 Nếu r = 8 … 1 3 5 7 … … 3 1 7 5 … Nếu r = 2 … 1 3 5 7 … … 3 1 7 … 5
III. Xây dựng nhanh mộtlờigiải Các bước tìm VíDụ B3 B3: Bổ sung lần lượt các số lẻ từ 1 đến n vào cuối danh sách. Nếu r= 8 thì đổi chỗ từng cặp, còn nếu r = 2 thì đổi chỗ 1 và 3 và chuyển 5 xuống cuối danh sách và nếu r = 3 hoặc r = 9, chuyển 1 và 3 xuống cuối danh sách 2 4 1 3 Nếu r = 8 … 3 1 7 5 … Nếu r = 2 … 3 1 7 … 5 Nếu r = 3 hoặc r = 9 … 1 3 5 7 … … 5 7 … 1 3
III. Xây dựng nhanh mộtlờigiải Các bước tìm VíDụ B4: Lấy danh sách trên làm danh sách chỉ số cột, ghép vào danh sách chỉ số dòng theo thứ tự tự nhiên ta được một lời giải của bài toán. B4 1 2 3 4 2 4 1 3 1 2 3 4
III. Xây dựng nhanh mộtlờigiải 14 quân hậu (r = 2): 2, 4, 6, 8, 10, 12, 14, 3, 1, 7, 9, 11, 13, 5. 15 quân hậu (r = 3): 4, 6, 8, 10, 12, 14, 2, 5, 7, 9, 11, 13, 15, 1, 3. 20 quân hậu (r= 8): 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 1, 7, 5, 11, 9, 15, 13, 19, 17.
IV. Một số lời giải cho bài toán n quân hậu Ta có bảng sau đây cho n quân hậu Lưu ý:rằng bài toán với 6 quân hậu có ít lời giải hơn bài toán với 5 quân hậu. Hiện nay chưa có công thức về số lượng chính xác lời giải.
V. Mã giả • Void n_Queens(i) • { • for (j = 1; j <= n; j++) • if (a[j] && b[i + j] && c[i - j]) • { • x[i] = j; • a[j] = b[i + j] = c[i - j] = false; • if (i == n) Print(x); • else • n_Queens(i + 1); • a[j] = b[i + j] = c[i - j] = true; • } • } • Thủ tục tìm tất cả các lời giải của bài toán n hậu chỉ bao gồm một lời gọi n_Queens(1);
VI. Biểu diễn bằng cây Start 1.3 1.4 1.1 1.2 2.3 2.4 2.4 2.1 2.1 2.2 3.2 3.1 3.4 3.3 4.3 4.2