You are on page 1of 4

Thuật toán quay lui

void backtracking(int n, int k, int *a) {


// Nếu đã sắp xếp xong n quân cờ
if (k == n) {
// In ra cách sắp xếp
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;
return;
}

// Lựa chọn vị trí cho quân cờ thứ k


for (int i = 0; i < n; i++) {
// Kiểm tra xem vị trí i có hợp lệ hay không
if (a[i] == -1) {
// Sắp xếp quân cờ thứ k vào vị trí i
a[i] = k;

// Tiếp tục đệ quy cho các quân cờ tiếp theo


backtracking(n, k + 1, a);

// Quay lui
a[i] = -1;
}
}
}

Thuật toán quay lui hoán vị

void backtracking(int n, int k, vector<int> &a) {


// Nếu đã hoán đổi xong n phần tử
if (k == n) {
// In ra hoán vị
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;
return;
}

// Lựa chọn phần tử thứ k để hoán đổi


for (int i = k; i < n; i++) {
// Hoán đổi vị trí của phần tử thứ k và phần tử thứ i
swap(a[k], a[i]);

// Tiếp tục đệ quy cho các phần tử tiếp theo


backtracking(n, k + 1, a);

// Quay lui
swap(a[k], a[i]);
}
}

Thuật toán quay lui tổ hợp chập k

void backtracking(int n, int k, vector<int> &a) {


// Nếu đã chọn xong k phần tử
if (k == 0) {
// In ra tổ hợp
for (int i = 0; i < a.size(); i++) {
cout << a[i] << " ";
}
cout << endl;
return;
}

// Lựa chọn phần tử thứ k


for (int i = 0; i < n; i++) {
// Kiểm tra xem phần tử i đã được chọn hay chưa
if (find(a.begin(), a.end(), i) == a.end()) {
// Thêm phần tử i vào tổ hợp
a.push_back(i);

// Tiếp tục đệ quy cho các phần tử tiếp theo


backtracking(n - 1, k - 1, a);

// Quay lui
a.pop_back();
}
}
}

Thuật toán sinh hoán vị

void generate_permutation(int n, vector<int> &a) {


// Nếu đã hoán đổi xong n phần tử
if (n == 0) {
// In ra hoán vị
for (int i = 0; i < a.size(); i++) {
cout << a[i] << " ";
}
cout << endl;
return;
}

// Lựa chọn phần tử thứ n


for (int i = 0; i < n; i++) {
// Hoán đổi vị trí của phần tử thứ n và phần tử thứ i
swap(a[n - 1], a[i]);

// Tiếp tục sinh ra các hoán vị tiếp theo


generate_permutation(n - 1, a);

// Quay lui
swap(a[n - 1], a[i]);
}
}

Thuật toán sinh hoán vị tổ hợp chập k

void generate_permutation(int n, int k, vector<int> &a) {


// Nếu đã hoán đổi xong k phần tử
if (k == 0) {
// In ra hoán vị
for (int i = 0; i < a.size(); i++) {
cout << a[i] << " ";
}
cout << endl;
return;
}

// Lựa chọn phần tử thứ k


for (int i = 0; i < n; i++) {
// Kiểm tra xem phần tử i đã được chọn hay chưa
if (find(a.begin(), a.end(), i) == a.end()) {
// Hoán đổi vị trí của phần tử thứ k và phần tử thứ i
swap(a[n - 1 - k], a[i]);

// Tiếp tục sinh ra các hoán vị tiếp theo


generate_permutation(n - 1, k - 1, a);

// Quay lui
swap(a[n - 1 - k], a[i]);
}
}
}

thuật toán sinh xâu nhị phân


void generate_binary_string(int n, string &s) {
// Nếu xâu đã có độ dài n
if (n == 0) {
// In ra xâu
cout << s << endl;
return;
}

// Thêm 0 vào xâu


s += "0";
generate_binary_string(n - 1, s);

// Thêm 1 vào xâu


s += "1";
generate_binary_string(n - 1, s);
}

You might also like