Backtracking
Bài toán N-Queens
- Cho bàn cờ NxN, đặt N quân hậu (queen) sao cho không có 2 quân hậu nào ăn nhau. Trong cờ vua, quân hậu có thể đi (ngang, dọc, chéo). Vì vậy ta phải đảm bảo: không cùng hàng, không cùng cột, không cùng đường chéo.
Các cách giải quyết bài toán
- Brute force: đặt ngẫu nhiên trên bàn cờ, nên số case: 2^(N^2) -> cực lớn.
- Backtracking: đặt quân hậu từng hàng, nếu sai thì quay lại thử vị trí khác. Độ phức tạp: O(N!)
Ý tưởng thuật toán
solve(row):
if row == N
print solution
return
for col = 0 -> N-1
if valid(row, col)
place queen
solve(row + 1)
remove queen // backtrack
Ứng dụng
| Bài toán | Ý nghĩa |
|---|---|
| Sudoku solver | giải sudoku |
| Graph coloring | tô màu đồ thị |
| Hamilton path | tìm đường đi qua mọi đỉnh |
| Maze solving | tìm đường trong mê cung |
| N-Queens | tối ưu ràng buộc |