【发布时间】:2015-10-26 23:01:58
【问题描述】:
这个函数基本上通过将一个字符与它的所有其他字符交换来打印字符串的所有可能排列。我理解交换和置换的前两个调用。但是为什么第二次调用 swap 呢?我无法理解这段代码。有人可以解释一下这是如何工作的吗?
/* Function to print permutations of string
This function takes three parameters:
1. String
2. Starting index of the string
3. Ending index of the string. */
void permute(char *a, int l, int r)
{
int i;
if (l == r)
printf("%s\n", a);
else
{
for (i = l; i <= r; i++)
{
swap((a+l), (a+i));
permute(a, l+1, r);
swap((a+l), (a+i)); //backtrack
}
}
}
【问题讨论】: