了解一个C++ STL的函数 next_permitation 可用于生成全排列

如下例子

 #include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std; const int MAX_N = ;
int perm[MAX_N];
int POS[MAX_N];
bool used[MAX_N];
//dfs法求取 (0,1,2,3...n-1)的全排列 n!种 //自己定义的函数
void permutation1(int pos,int n)
{
if (pos == n)
{
for (int i = ; i < n; i++)
{
printf("%d ", POS[i]);
}
putchar('\n');
return ;
}
for (int i = ; i < n; i++)
{
if(!used[i])
{
POS[pos] = i;
used[i] = true;
permutation1(pos+, n);
used[i] = false;//回溯 当不用这个数的时候 取消used
}
}
} //c++提供的next_permutation
//即使有重复元素也会排列
//按照字典序排列 当排序呢完后会返回false
void permutation2(int n)
{
for (int i = ; i < n; i++)
{
perm[i] = i;
}
do
{
for (int i = ; i < n; i++)
{
printf("%d ", perm[i]);
}
printf("\n");
}while (next_permutation(perm, perm+n));
}
int main()
{
int n;
cin >> n;
//permutation1(0,n);//很赞
permutation2(n);
return ;
}
//以上属于特殊状态的枚举 又或者 可以使用位运算 枚举组合数 或者 求集合的子集
//以后提及

只需要打印就行了 其他的都交给permitation(perm, perm+n)

当枚举完毕 返回false

next_permitation的更多相关文章

  1. 错排公式 全排列函数 next_permitation(a,a+n)

    不容易系列之一 错排:3件东西分别装进3个不同的特定的袋子,如果刚好一个都没有装对,就叫做错排! 大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好“一件”事情尚且不易,若想永远 ...

随机推荐

  1. SpringMvc如何将Url 映射到 RequestMapping (二)

    昨天简单分析了Springmvc 中 RequestMapping 配置的url和请求url之间的匹配规则.今天详细的跟踪一下一个请求url如何映射到Controller的对应方法上 一.入口 org ...

  2. Android IJKPlayer缓冲区设置以及播放一段时间出错解决方案

    IJKPlayer拖动播放进度会导致重新请求数据,未使用已经缓冲好的数据,所以应该尽量控制缓冲区大小,减少不必要的数据损失. mMediaPlayer.setOption(IjkMediaPlayer ...

  3. K2 blackpearl 安装向导

    最近我在Windows Server 2012 R2上面安装K2 blackpearl遇到了不小的麻烦,于是乎写了这篇向导,把自己遇到的问题记录下来,留给自己和需要帮助的人参考. 首先要解压缩blac ...

  4. java格式化sql

    在日志分析中,经常会对记录的sql进行分析,所以将一整行sql格式化,进行多行缩就显得很有必要,许多数据库客户端都提供sql的格式化功能,但复杂的多层嵌套sql往往格式化的l还不够友好,所以就自己造了 ...

  5. ButterKnife 在父类 点击事件没反应的解决方案

    在用继承的方式实现butterKnife的封装的时候遇到问题, butterKnife就在baseActivity中绑定的,但是父类中公共控件点击事件无效.找了半天原因,原来是子类和父类定义的点击方法 ...

  6. 前端Unicode转码的好处

    站长工具支持Unicode转码:http://tool.chinaz.com/Tools/Unicode.aspx (这是一个网页标题)转码后 ------>变为:\u8fd9\u662f\u4 ...

  7. connection timeout 和command timeout

    每次对数据库连接时,我们有时候会碰到连接超时或者命令超时,这两个超时是不一样的.以ADO.NET为例,当客户端和服务器端连接时,碰到的超时情况主要有下面几种: ''' 当从连接池获取一个连接时,碰到超 ...

  8. java线程学习2

    sleep  变为阻塞态  但不释放锁  休眠指定毫秒时间 yield  变为就绪态  可能立即被执行  也可能不立即被执行 join   插队  暂停当前执行的线程  让调用join的线程先执行 线 ...

  9. 双引号" "和单引号' '区别

    双引号是字符串,单引号是字符 “\n”与'\n': 相同点: 都能起到换行作用     不同点: "\n" <=> {'\n', '\0'} '\n' <=> ...

  10. 借助百度地图API制作企业百度地图

    做网站需要插入地图,可以借助百度地图API,具体步骤如下: 1.打开百度地图API的网址:   http://api.map.baidu.com/lbsapi/creatmap/ 2.设置中心点 3. ...