按特定顺序打印所有数组的位置

时间:2016-02-12 18:53:59

标签: c arrays permutation

这是一个已经出现过几次的问题( 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:感谢您的编辑!

0 个答案:

没有答案