Bài toán

  • Xét tập
  • Gọi là một tính chất trên , ta cần liệt kê tất cả các thỏa mãn tính chất
  • có dạng với

Thuật toán

  • Xét lời giải bộ phận cấp k có dạng với
    • Khi ta có lời giải rỗng
    • Khi ta có lời giải đầy đủ
  • Xét từ lời giải rỗng, ta xác định những phần tử, gọi là tập ứng cử viên của có thể chọn vào vị trí để đảm bảo .
  • Từ lời giải cấp , ta xác định tập ứng củ viên có thể chọn vào vị trí
    • Nếu , quay lại lời giải cấp , tìm ứng cử viên khác thay vào
    • Nếu , bổ sung một phần tử vào lời giải.
      • Nếu , kết thúc, trả về vời giải
      • Nếu , tiếp tục thay lần lượt các giá trị trong vào và tiếp tục

Mã giả

Xét hàm Try(k)

Try(k):
	Xây dựng S_k;
	Với x_k trong S_k:
		Chọn x_k;
		Nếu k == n:
			Lưu cấu hình;
		Nếu k < n:
			Try(k+1);
		Bỏ chọn x_k;

Để bắt đầu thuật toán sinh, ta gọi Try(1)