了解一个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. 对dynamic和lambda的学习

    var, object, dynamic的区别以及使用 dynamic(2) – ExpandoObject的使用 .NET中的Lambda表达式与匿名方法

  2. spark调试环境搭建

    到目前为止,基于RDD的spark streamming实时应用和离线应用(主要解析日志)已经写了一些,但是对spark的了解还是很少,所以决心花点精力,对spark做一些比较深入的了解和学习.参照之 ...

  3. .net 环境下c# 通信

    .net环境下通信主要掌握 通信协议(UDP&TCP). 网络抓包工具().:使用方法 点对点通信,IP组播,广播通信 c#中结构体转为字节流方式 c#结构体与c++结构体转换对应关系 开源的 ...

  4. 通过 DBCA 工具创建Oracle数据库

    DBCA 是 Oracle 提供的一款图形化界面工具,用来帮助数据库管理员快速.直观地创建数据库,避免了繁琐复杂的 SQL命令操作. 使用 DBCA创建数据库的过程如下. (1)依次 单击“开始 ”→ ...

  5. 关于.Net中Process的使用方法和各种用途汇总(二):用Process启动cmd.exe完成将cs编译成dll

    上一章博客我为大家介绍了Process类的所有基本使用方法,这一章博客我来为大家做一个小扩展,来熟悉一下Process类的实际使用,废话不多说我们开始演示. 先看看我们的软件要设计成的布局吧. 首先我 ...

  6. WPF学习10:基于MVVM Light 制作图形编辑工具(1)

    图形编辑器的功能如下图所示: 除了MVVM Light 框架是一个新东西之外,本文所涉及内容之前的WPF学习0-9基本都有相关介绍. 本节中,将搭建编辑器的界面,搭建MVVM Light 框架的使用环 ...

  7. 掌握Spark机器学习库-09.3-kmeans算法实现分类

     数据集 iris.data 数据集概览 代码 package org.apache.spark.examples.hust.hml.examplesforml import org.apache.s ...

  8. asterisk-java ami3 属性改变监听

    asteriskServer.addAsteriskServerListener(new AsteriskListenerInit());//服务属性监听会自动连接服务 实现AsteriskServe ...

  9. Android(java)学习笔记197:ContentProvider使用之内容观察者02

    下面通过3个应用程序之间的交互说明一下内容观察者: 一. 如下3个应用程序为相互交互的: 二.交互逻辑图: 三.具体代码: 1.   16_数据库工程: (1)数据库帮助类BankDBOpenHelp ...

  10. Python3.0 调用HTMLTestRunner生成的报告中不能显示用例中print函数的输出

    官方原生的HTMLTestRunner.py支持python2.0版本,python3.0版本的使用需要做一些修改: Python3调用HTMLTestRunner执行用例生成测试报告中,不能正常显示 ...