Ví dụ: n = 3;
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
Em thắc mắc rằng khi ở đoạn if (k==n) sau lúc đó i = 3 rồi và Bool [3] = false;, song rồi hết vòng lặp, Mà sao nó lại chạy tiếp ạ?
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;
}
}
}

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