回溯法要怎么理解?
我遇到过一些回溯算法,总是不能理解,比如下面这个输出1234四个数全排列的程序,要怎么理解呢?求大神解释
#include <stdio.h>#include <assert.h>#define swap(A, a, b, tmp)\{\ (tmp) = A[(a)];\ A[(a)] = A[(b)];\ A[(b)] = (tmp);\ } void print_r(const int A[], int len);void perm(int A[], int start, int end, int len);int main(){ int A[4] = {1, 2, 3, 4}; perm(A, 0, 3, 4); getchar(); return 0;}void print_r(const int A[], int len){ assert(NULL != A); int i; for (i = 0; i < len; i++) printf("%d ", A[i]); printf("\n");}void perm(int A[], int start, int end, int len){ assert(NULL != A); int i, tmp = 0; if (start == end) { print_r(A, len); } else { for (i = start; i <= end; i++) { swap(A, i, start, tmp); perm(A, start+1, end, len); swap(A, i, start, tmp); } }}