Lý thuyết Back Track bạn có thể xem thêm ở đây.
Biểu diễn các xâu nhị phân dưới dạng b1, b2,..., bn, trong đó bi∈{0, 1 }. Thủ tục đệ qui Try(i) xác định bi với các giá trị đề cử cho bi là 0 và 1. Các giá trị này mặc nhiên được chấp nhận mà không cần phải thoả mãn điều kiện gì (do đó bài toán không cần đến biến trạng thái). thủ tục Init khởi tạo giá trị n và biến đếm count. thủ tục kết quả in ra dãy nhị phân tìm được. Chẳng hạn với n =3, cây tìm kiếm lời giải được thể hiện như hình.
Chương trình cài đặt:
Biểu diễn các xâu nhị phân dưới dạng b1, b2,..., bn, trong đó bi∈{0, 1 }. Thủ tục đệ qui Try(i) xác định bi với các giá trị đề cử cho bi là 0 và 1. Các giá trị này mặc nhiên được chấp nhận mà không cần phải thoả mãn điều kiện gì (do đó bài toán không cần đến biến trạng thái). thủ tục Init khởi tạo giá trị n và biến đếm count. thủ tục kết quả in ra dãy nhị phân tìm được. Chẳng hạn với n =3, cây tìm kiếm lời giải được thể hiện như hình.
#include <stdio.h> #include <alloc.h> #include <conio.h> #include <stdlib.h> void Result(int *B, int n){ int i; printf("\n "); for (i = 1; i <= n; i++) printf("%3d", B[i]); } void Init(int *B, int n){ int i; for (i = 1; i <= n; i++) B[i] = 0; } void Try(int i, int *B, int n){ int j; for (j = 0; j <= 1; j++){ B[i] = j; if (i == n) { Result(B, n); } else Try(i + 1, B, n); } } void main(void){ int *B, n; clrscr(); printf("\n Nhap n="); scanf("%d", &n); B = (int *)malloc(n*sizeof(int)); Init(B, n); Try(1, B, n); free(B); getch(); }