16

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

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: 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
Page 2: 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

Bài toán Bài toán nn quân hậu là bài toán đặt quân hậu là bài toán đặt n quân n quân hậuhậu trên bàn  trên bàn cờ vuacờ vua kích  kích thước thước n n ×× n n sao cho không sao cho không có quân hậu nào có thể "ăn" được quân hậu kháccó quân hậu nào có thể "ăn" được quân hậu khác

Bài toán 4 quân hậuBài toán 4 quân hậu

Page 3: 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

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]

1 2 3 4j

1

2

3

4

i

i – j = consti – j = const

i + j = consti + j = const

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.

Page 4: 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

B1: Chia n cho 12 lấy số dư r.

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

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

2 4 6 8 …

4 % 12 = 4

r = 4

B1

Nếu r = 3 hoặc r = 9

2 4B2

4 6 8 … 2

Page 5: 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

B32 4 1 3

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

Nếu r = 8

… 1 3 5 7 …

… 3 1 7 5 …

Nếu r = 2

… 1 3 5 7 …

… 3 1 7 … 5

Page 6: 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

B32 4 1 3

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

Nếu r = 8

Nếu r = 3 hoặc r = 9

… 1 3 5 7 …

… 5 7 … 1 3

Nếu r = 2

… 3 1 7 5 …

… 3 1 7 … 5

Page 7: 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

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

2 4 1 3

1

2

3

4

1 2 3 4

Page 8: 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

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.

Page 9: 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

Ta có bảng sau đây Ta có bảng sau đây cho cho nn quân hậu quân hậu

n 1 2 3 4 5 6 7 8 9 10

số lời giải không đối

xứng1 0 0 1 2 1 6 12 46 92

Tất cả số lời giải

1 0 0 2 10 4 40 92 352 724

Lưu ýLưu ý:: rằng bài toán với 6 quân hậu có ít lời giải hơn 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ố 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.lượng chính xác lời giải.

Page 10: 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
Page 11: 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
Page 12: 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
Page 13: 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
Page 14: 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

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);elsen_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);

Page 15: 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

StartStart

1.1 1.2

2.3 2.4

1.41.3

3.2

2.1

3.1

2.4

4.3

2.22.1

4.2

3.4 3.3

Page 16: 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