STL中用next_permutation解决排列问题
来源:互联网 发布:html游戏源码 编辑:程序博客网 时间:2024/06/05 11:09
排列组合问题是数学中很常见的问题。很多时候我们需要遍历各种排列,穷尽后才能找到问题的答案,C++标准库中恰好就又两个处理整数排列问题的算法,即<algorithm>中的prev_permutation和next_permutation算法,两个算法差不多,只是遍历的顺序相反,下面以next_permutation为例说明此函数的用法。
首先看一个相关的问题,还是CSDN在线编程的问题:
设数组a包含n个元素恰好是0..n - 1的一个排列,给定b[0],b[1],b[2],b[3]问有多少个0..n-1的排列a,满足(a[a[b[0]]]*b[0]+a[a[b[1]]]*b[1]+a[a[b[2]]]*b[2]+a[a[b[3]]]*b[3])%n==k ? 输入包含5个参数:N,K,B0,B1,B2,B3,其中 4<= N<12, 0 <= K,B0,B1,B2,B3 < N。
看过题目后,思考了一会,感觉没有什么简便的方法,唯有穷举所有N个数的排列,一个个测试后才能判断是否满足所给的等式。因为之前用过next_permutation,所以一下就相到这个算法了。使用next_pernutation,主要注意所给的初始排列一定是要有序的,这是是否能正确使用此函数的关键,一般next_permutation都是结合do...while();使用的。
下面给出我的初始版本:
#include <algorithm>
#include <vector>
#include <iostream>
#include <cassert>
using namespace std;
int main(){
int count = 0;
int N;
int K;
int b0,b1,b2,b3;
cout<<"please input N,K,b0,b1,b2,b3 respectively:\n4<=N<12,0<K,b0,b1,b2,b3<N\n";
cin>>N>>K>>b0>>b1>>b2>>b3;
assert(N>=4&&N<12);
assert(0<N &&N>K && 0<b0&&b0<N && 0<b1&&b1<N && 0<b2&&b2<N && 0<b3&&b3<N);
vector<int> a;
for(int i = 0;i < N; ++i)
a.push_back(i);
do{
if((a[a[b0]]*b0 + a[a[b1]]*b1 + a[a[b2]]*b2 + a[a[b3]]*b3)%N==K)
count++;
}while(next_permutation(a.begin(),a.end()));
cout<<"the total number is "<<count<<"\n";
}
- STL中用next_permutation解决排列问题
- STL next_permutation 全排列
- [STL]next_permutation全排列
- 全排列(STL next_permutation)
- next_permutation解决排列问题的利器
- 全排列问题的STL用法(next_permutation类)
- 全排列问题的STL用法(next_permutation类)
- STL里面的next_permutation求字典序排列问题
- [POJ1833] 排列(STL之next_permutation)
- STL实现全排列 next_permutation
- STL的排列算法next_permutation
- STL中的全排列next_permutation
- 枚举全排列 STL next_permutation
- HDU1716 -- 全排列 -- STL -- next_permutation()
- STL next_permutation(全排列算法)
- next_permutation(排列问题)
- poj 1833 排列 [ 使用STL的next_permutation函数生成全排列 + STL中copy函数的用法完美解决 ]
- STL 中 next_permutation 的全排列思路
- fprintf、fscanf读写乱码的问题
- VDD,VSS,VCC区别
- 黑马程序员------for语句练习题
- cocos2d-iPhone基础
- Oracle 11gR2 RAC 进程说明【偶像大神--dave】
- STL中用next_permutation解决排列问题
- 基于模板的通用代码生成器LKGenerator(二)-使用时的关键步骤,注意事项及实例
- NSCopying协议和copy方法
- 进不了http://localhost:8080 请查看她的后面答复
- 待处理的事情4
- Netty教程—Part3—ChannelEvent—真的吗?
- 电影TS、TC、SCR、R5、BD、HD等版本是什么意思(转)
- 关于Block的copy和循环引用的问题
- WCF 使用 Entity Framework 配合 Unity 进行 IOC AOP 的实现