我的 C++ 代码具有重复的边界排列。我的问题是返回两个向量(名为 process,z),一个显示创建的排列中的元素数量(一维向量, ColIdx 表示排列的索引),另一个列出排列的每个元素(二维向量)。
void permute (vector<int>& qcassgn, vector<int>& start,
int qcsize, int bound, int colIdx,
vector<int>& process, vector<vector< int >> &z){
int sum=0;
for (int i=0; i< start.size(); i++) {
sum+= start[i];
}
if (sum >= bound) {
process[colIdx]= start.size();
for (int n=0; n< start.size(); n++) {
z[colIdx][n] = start[n] ;
cout << start[n] << " " ;}
cout << "\t" << process[colIdx] ;
cout << "\t" << colIdx << "\n";
return;
}
for (int i= 0; i < qcsize; i++) {
vector<int> newStart(start);
newStart.push_back(qcassgn[i]);
permute (qcassgn, newStart, qcsize, bound, (colIdx+i), process, z);
}
}
main() {
...
for (j=0; j< qcsize; j++) {
newarray[0]=result[j];
permute(result, newarray, qcsize, counter[i][s], colIdx, process, z);
}
...
}
这个想法似乎有效,但是我的 colIdx 无法计算生成排列的正确索引。我无法计算正确的 colIdx。此外,我的二维向量给出了向量超出范围的错误。- 说明这种表示的 ColIdx 计数器的正确方法是什么 - 如何用二维向量解决范围问题。提前谢谢
示例:结果数组=[2,3,4],绑定=10
正确的结果是为排列写的,但不是为它的索引和元素写的:
[2 2 2 2 2] 5 1
[2 2 2 2 3] 5 2
[2 2 2 2 4] 5 3
[2 2 2 3 2] 5 2 (I want it to be 4)
[2 2 2 3 3] 5 3 (I want it to be 5)
[2 2 2 4] 4 3 ...