Giải thích thuật toán sinh quay lui

Mọi người giải thích giúp em code sinh quay lui này với ạ!!

int a[10], n, check[10], k;
void qlhoanvi(int i){
    FRR(j, 1, n){
        if(check[j] == 0){
            a[i] = j;
            if(i == n) OUT();
            else{
                check[j] = 1;
                qlhoanvi(i+1);
                check[j]= 0;
            }
        }
    }
}
int main(){
    cin >> n;
    qlhoanvi(1);
}

Nhất là đoạn

check[j] = 1;
qlhoanvi(i+1);
check[j]= 0;

nó chạy như nào ah???

Nếu ô nào chưa chọn thì chọn nó, sau đó bỏ chọn để khôi phục trạng thái ban đầu :smiley:

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