回溯法求解全排列问题
对于数组{1,2,3}进行全排列
问题的解空间树如图所示:
对于n个元素的全排列,是一个n层的解空间树
我们要做的任务就是确定每一层取哪个值
第一层中我们有三个取值
第二层中每个分支有两种取值
最后一层中每个分支只有一个取值
第一层中,我们的第一个位置是排好的,我们要做的是排之后的元素
第二层中,我们要做的仅仅是排第三个位置的元素
由此得出结论,对于已经排好的部分,我们就不用去管了,只要去排后面的就好了
对于每一个元素我们使用for()依次选取每个没有排序的元素
对于数组a={1,2,3}
我们第一层可以选三个元素,分别为a[0],a[1],a[2],第二层中,我们可以选择元素为a[1],a[2].推广一下对于含有N个元素的数组A,第i层可以选择进行排序的元素为A[i-1],...A[N-1].
其中对于每一层的元素选择,我们可以看做是未排序数组部分a[i],,,a[n-1]第一个元素的确定,我们可以理解为第一个元素和哪个元素交换,若是选择第j个元素作为未排序的第一个,那么只需要将a[i],和a[j]交换即可,