使用回溯算法对字符串进行排列

时间:2016-02-18 00:37:08

标签: java algorithm recursion permutation backtracking

我正在阅读下面关于Geeksforgeeks的代码,但我无法理解它是如何工作的!如果有人能用图解说明。那太棒了!

这是代码:

static void swap(char a[], int l, int r) {
    char temp = a[l];
    a[l] = a[r];
    a[r] = temp;
}

static void permute(char a[], int l, int r) {
    if (l == r)
        System.out.println(getString(a));
    else {
        for (int i = l; i <= r; i++) {
            swap(a, l, i);
            permute(a, l + 1, r);
            swap(a, l, i); // backtrack
        }
    }
}

enter image description here

1 个答案:

答案 0 :(得分:3)

我不知道你在哪里感到困惑:你提供的照片很清楚地向我解释了...... : - )

终止条件(图表的底行,2个红色和1个绿色项目): 如果列表中只剩下一个要考虑的元素,则无法交换它。排列完成。的返回

否则...... 对于阵列中剩余的每个项目,将该位置交换到最左侧可用的位置。移动&#34;固定&#34;指针向右一个点,并在数组的其余部分调用例程。

整体,这只是走下阵列:为第一个位置挑选每个项目(依次);为第二个选择每个剩余的项目(依次); ......继续到列表的末尾。

这能为你清理什么吗?