为什么这个代码注释是工作的(代码编译和运行良好,但实际上并没有显示排列):
int main(int argc, char *argv[])
{
long number;
vector<long> interval;
vector<long>::const_iterator it;
cout << "Enter number: ";
cin >> number;
while(number-->0){
interval.push_back(number);
}
do{
for(it = interval.begin(); it < interval.end(); ++it){
cout << *it << " ";
}
cout << endl;
} while(next_permutation(interval.begin(), interval.end()));
return (0);
}但是在改变了这一行之后:
while(next_permutation(interval.begin(), interval.end()));通过以下方式:
while(prev_permutation(interval.begin(), interval.end()));置换不是通过对位置的作用来改变向量中的元素吗?
PS:我现在已经编辑了代码.
发布于 2010-06-29 15:09:43
排列是按顺序排列的,这就是std::next_permutation和std::prev_permutation算法所遍历的。
在这里,您输入“最大”排列,因此没有下一个排列顺序。
发布于 2010-06-29 15:15:53
不是通过对位置的作用来改变向量中的元素吗?
不是的。next_permutation使用元素的排序来确定下一个排列。
例如,如果Anext_permutation of A,B,C将是A,C,B。但是,如果Anext_permutation of A,B,C将是C,A,B。
因为你的向量最初是按递减顺序排列的,所以它将是最后的排列。
您可以使用std::greater排序来反转比较方向。
} while(next_permutation(interval.begin(), interval.end(), greater<long>()));
// ^^^^^^^^^^^^^^^发布于 2010-06-29 15:10:09
我不认为next_permutation可以在位置上工作(它将把这些信息存储在哪里?)您需要能够比较元素才能使next_permutation工作,这就是它用来生成按字母顺序排列的下一个排列。
试着用相反的顺序插入数字,看看是否有效。
https://stackoverflow.com/questions/3141907
复制相似问题