You are on page 1of 3

Ý tưởng:

Trước hết, cần phải nói rằng: Có thể có rất nhiều cách đặt quân hậu trên bàn cờ thoả mãn yêu
cầu đề bài. Trên thực tế, với n = 8 thì có 12 cách xếp các quân hậu thoả mãn.
Bây giờ thì hãy quay lại với bài toán của chúng ta. Bài toán trên thực chất là một bài toán rất
nổi tiếng trong Tin học đã được đặt ra vào những năm 1848. Trong các cách giải được đưa ra,
cách phổ biến nhất đó chính là: Thử. Ta sẽ thử đặt 8 quân hậu vào các ô của bàn cờ sau đó
kiểm tra xem liệu cách đặt đó có phù hợp hay không.
Vậy thì chúng ta nên thử như thế nào đây?
 Do các quân hậu không thể cùng nằm trên một hàng nên chắc chắn khi thử chúng ta
sẽ phải đặt n quân hậu trên n hàng riêng biệt. Như vậy là đã đảm bảo điều kiện về
hàng.
 Với mỗi hàng chúng ta sẽ đặt thử các quân hậu vào các vị trí trên hàng đó rồi tiến
hành kiểm tra 2 điều kiện còn lại. Việc đặt thử này có thể tiến hành bằng việc dùng
vòng lặp để duyệt qua tất cả các vị trí.
 Nếu gặp một trường hợp thoả mãn chúng ta có thể in ra kết quả và thoát chương trình.
Chi tiết về chuyện thử như thế nào hãy để ở phần sau. Bây giờ hãy xem xét một vấn đề:
Chúng ta sẽ kiểm tra điều kiện không cùng cột và đường chéo như thế nào?
 Với điều kiện về cột, chúng ta sẽ sử dụng một mảng đánh dấu lại các cột đã có quân
hậu. Nếu có một quân hậu được đặt vào cột đã được đánh dấu thì cách xếp hậu là
không thoả mãn. Như vậy là ta đã kiểm tra được điều kiện về cột
 Với đường chéo, mọi thứ sẽ phức tạp hơn. Ta nhận thấy, với mỗi quân hậu sẽ có 2
đường chéo để di chuyển. Chúng ta sẽ quy ước: đường chéo có chiều từ trái qua phải
sẽ là “đường chéo chính”, đường chéo có chiều từ phải qua trái sẽ là “đường chéo
phụ”.
Hãy cùng nhìn vào các ô ở đường chéo chính trong hình minh hoạ trên. Toạ độ các ô đó là (1,
2); (2, 3); (3, 4). Các bạn đã nhận ra điểm đặc biệt của các toạ độ kia chưa? Hiệu số giữa chỉ
số hàng và cột là cố định với tất cả các ô thuộc cùng một đường chéo chính và mỗi đường
chéo chính lại có một hiệu số riêng đặc trưng cho nó.
Bây giờ hãy cùng nhìn vào đường chéo phụ trong hình minh hoạ. Toạ độ các ô trên đường
chéo phụ là (1,2); (2, 1). Khác với đường chéo chính, tổng của chỉ số hàng và chỉ số cột của
các ô thuộc cùng một đường chéo phụ là giống nhau và mỗi đường chéo phụ lại có một tổng
riêng đặc trưng cho nó.
Từ hai nhận xét trên, ta có thể dùng hai mảng đánh dấu lại hiệu của đường chéo chính và tổng
của đường chéo phụ. Nếu quân hậu được đặt vào đường chéo đã được đánh dấu thì có nghĩa
là không hợp lệ.

Triển khai ý tưởng:


Chúng ta hiện tại sẽ có hai công việc chính:
 Đặt thử các quân hậu
 Kiểm tra tính hợp lệ của quân hậu được đặt vào
Với việc kiểm tra tính hợp lệ, chúng ta chỉ cần dùng 3 mảng đánh dấu một chiều với mục tiêu
như đã trình bày ở trên. Việc này là không khó khăn. Bây giờ, vấn đề chính sẽ là làm sao để
đặt thử các quân hậu.
Hãy thử hình dung luồng chạy của chương trình trong ví dụ ban đầu qua đoạn mã giả sau:
 Xét hàng 1, đặt thử quân hậu tại vị trí cột 1. Phép đặt hợp lệ. Ta đánh dấu các cột, 2
đường chéo chứa quân hậu này. Chuyển qua xét hàng 2.
 Xét hàng 2, đặt thử quân hậu tại vị trí cột 1. Phép đặt không hợp lệ do cùng cột với
quân hậu đặt trước đó (hàng 1).
 Xét hàng 2, đặt thử quân hậu tại vị trí cột 2. Phép đặt không hợp lệ do cùng đường
chéo chính với quân hậu đặt trước đó (hàng 1).
 Xét hàng 2, đặt thử quân hậu tại vị trí cột 3. Phép đặt hợp lệ. Ta đánh dấu các cột, 2
đường chéo chứa quân hậu này. Chuyển qua xét hàng 3.
 Xét hàng 3, đặt thử quân hậu tại vị trí cột 1. Phép đặt không hợp lệ do cùng cột với
quân hậu đặt trước đó (hàng 1).
 Xét hàng 3, đặt thử quân hậu tại vị trí cột 2. Phép đặt không hợp lệ do cùng đường
chéo phụ với quân hậu đặt trước đó (hàng 2).
 Xét hàng 3, đặt thử quân hậu tại vị trí cột 3. Phép đặt không hợp lệ do cùng cột với
quân hậu đặt trước đó (hàng 2).
 Xét hàng 3, đặt thử quân hậu tại vị trí cột 4. Phép đặt không hợp lệ do cùng đường
chéo chính với quân hậu đặt trước đó (hàng 2).
 Do các phương án với hàng 3 đều không khả thi, quay lại xét hàng 2.
 Xét hàng 2, xoá bỏ đánh dấu về cột và 2 đường chéo với cột 3 đang được chọn.
 Xét hàng 2, đặt thử quân hậu tại vị trí cột 4 (do vị trí lần trước xét đang là 3). Phép đặt
hợp lệ. Ta đánh dấu các cột, 2 đường chéo chứa quân hậu này. Chuyển qua xét hàng
3.
 Quá trình tương tự
 Khi ta xét đến hàng thứ 5 (hàng không có thật) có nghĩa là cả 4 hàng cần đặt quân hậu
đều đã đặt thành công thì ta tin ra kết quả và dừng chương trình.
Nếu chưa nhận ra được, hãy nhìn vào mô hình bên dưới của lời giải trên.

Đây chính là mô hình đệ quy, phương pháp được sử dụng ở đây gọi là quay lui.

Code:

You might also like