这是一个已经出现过几次的问题( cf Print all the permutations of a string in C )但是我遇到的麻烦有点不同而且我有很难找到答案。
我目前正致力于在int数组的所有排列上应用另一个函数的函数。我决定使用回溯,它产生了下面的代码。
void ft_perm(int *mat, int size, int i) // Initially called with i = 0
{
int j;
j = i;
if (i == size)
{
f(mat, ...) // any function that applies itself on mat
}
else
{
while (j >= 0)
{
ft_swap(mat, i, j); // function that swaps i and j
ft_perm(mat, size, i + 1);
ft_swap(mat, i, j); // backtrack
j--;
}
}
}
然而,应用该功能的顺序并不完全是我需要的,我无法弄清楚如何使其正常工作。我需要' f'以最小数字始终位于最左边的顺序应用。
例如,使用3号数组,当前函数将应用' f'上 012-> 021-> 210-> 102-> 120而我需要的是应用' f'上 012-> 021-> 102-> 201-> 120-> 210
但是那个具体的,简而言之,我的问题是"是否可以使用回溯来操纵排列顺序?"
感谢您的帮助,对不起这个冗长而摇摇欲坠的问题感到抱歉。
Ps:感谢您的编辑!