Quay lui hoán vị

#include<iostream>
#define MAX 20
using namespace std;

int n;
int Bool[MAX] = { 0 };//Đánh dấu chưa có phần tử nào sử dụng hết
int A[MAX];//Lưu hoán vị vào mảng A

void xuat() {
	for (int i = 1; i <= n; i++)
		cout << A[i] << " ";
	cout << endl;
}

void Try(int k) {
	for (int i = 1; i <= n; i++) {
		//Kiểm tra nếu phần tử chưa được chọn thì sẽ đánh dấu
		if (!Bool[i]) {
			A[k] = i; // Lưu một phần tử vào hoán vị
			Bool[i] = 1;//Đánh dấu đã dùng
			if (k == n)//Kiểm tra nếu đã chứa một hoán vị thì xuất
				xuat();
			else
				Try(k + 1);
			Bool[i] = 0;
		}
	}
}

int main() {
	cout << "Mhap n: ";
	cin >> n;
	Try(1);
}

Mọi người giải thích giúp mình khi n = 4 với.
Ví dụ n =4 in ra được:

1234
1243
1324

Mình đang thắc mắc tại sao lại ra 1324?

Tại k=2 thì sau khi i=2 thì Bool[2] = 0, chạy lên thì i=3.

Sau khi in ra (dòng 22 chạy xong) call stack sẽ trông như
(k, i): (1, 1) (2, 3) (3, 2) (4, 4) < đỉnh stack

2 Likes

Bạn làm rồi có debug lại không ?
Mình suy nghĩ là bạn không debug, chỉ ‘Enter’ cho code chạy thôi.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?