01/10/2018, 08:34

Hỏi về thuật toán BackTracking

#include <stdio.h>

int n;
bool used[123];
int a[123];

void show(){
    int i;
    for (i=1; i<=n; i++)
    	printf("%d ", a[i]);
    printf("
");
}

void back(int pos){
    int i;
    if (pos==n+1) { show() ; return ; }
    for (i=1; i<=n; i++)
    if (!used[i]){
        a[pos]=i;
        used[i]=true;
        back(pos+1);
        used[i]=false;
    }
}

main(){
    scanf("%d", &n);
    back(1);
}

Đây là thuật toán Backtracking thầy e cho mẫu trên lớp nhưng em chưa hiểu chỗ return sau show().
Mong mọi người giúp đỡ. Em cảm ơn.

Nguyễn Văn Cao viết 10:50 ngày 01/10/2018

return để thoát ra khỏi hàm , tức là thoát ra khỏi vòng đệ qui đó bạn

rogp10 viết 10:40 ngày 01/10/2018

pos == n+1 là trường hợp dừng (thực ra ghi pos > n mới đầy đủ).

Bài liên quan
0