这是一门课程,所以请不要过于具体,但我正在寻找一种列出数字数组所有排列方式的方法。
我们必须在不同的柱子(就像锁)上排列不同的数字才能解开组合。每个柱子上可能有6个数字。只要n>r,它应该适用于任何n和r。
我已经有了随机生成组合的方法,并且有系统地在列表中查找它,但我无法生成所有排列的算法。
我能够在C ++中使用以下方法获取数字1-6的所有组合:
//n = number of digits - 1; list = list of digits to work with;
//number=finalized list of digits
void permute(int n, vector<int> list, vector<vector<int>>* number)
{
if(n==1)
{
number->push_back(list);
}else
{
for(int i = 1;i<n;i++)
{
permute(n-1,list, number);
if(n%2 == 0)
{
swap(list[1],list[n]);
}else
{
swap(list[i],list[n]);
}
}
}
};
但是,我得到了这样的列表: 123456 163452 等等,其中1始终是第一个数字, 但我还需要获取当第一个数字改变并且只有4个数字存在时的情况。
例如:
6341
4163
等等,其中有4个数字范围从1到6,您拥有所有可能的组合。
是否有人可以指导我使用另一种算法来补充这个问题?