博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 求枚举排列的两种方法
阅读量:6831 次
发布时间:2019-06-26

本文共 922 字,大约阅读时间需要 3 分钟。

枚举排列常用的方法有两种:一是递归枚举,二是用STL中的next_permutation。

1.枚举递归:

void print_permutation(int n,int *p,int *A,int cur){	if(cur == n){		for(int i = 0;i < n;i++)	cout << A[i] << " ";		cout << endl;	}	else for(int i = 0;i < n;i++){		int c1 = 0,c2 = 0;		for(int j = 0;j < cur;j++)	if(A[j] == p[i])	c1++;		for(int j = 0;j < n;j++)	if(p[i] == p[j])	c2++;		if(c1 < c2){			A[cur] = p[i];			print_permutation(n,p,A,cur+1);		}	}}

上述代码中c1指的是已经出现的元素(p[i])个数,c2指的是一共有几个元素。

2.next_permutation:

    头文件:#include<algorithm>

    原型:bool next_permutation(iterator begin,iterator end);

  • 已排好序的数组
  • 每次调用在原数组进行下一次排列
  • 如果当前序列不存在下一个排列时,返回false;否则返回true

用法如下:

#include
#include
using namespace std;int main(){ int n,p[10]; cin >> n; for(int i = 0;i < n;i++) cin >> p[i]; sort(p,p+n); do{ for(int i = 0;i < n;i++) cout << p[i] << " "; cout << endl; }while(next_permutation(p,p+n)); return 0;}

转载于:https://www.cnblogs.com/long98/p/10352239.html

你可能感兴趣的文章
MySQL之数据库对象查看工具mysqlshow
查看>>
EntLib.com 电子商务系统 v2.5 – 前台购物网站/网店发布-- 源码包
查看>>
40款用于简洁网页设计的光滑英文字体【上】
查看>>
Discuz最新patch
查看>>
Mysql master slave Failed to open the relay log
查看>>
华商网:一定是哪里出了问题!
查看>>
搭建kafka运行环境
查看>>
Linux上查看造成IO高负载的进程
查看>>
DOS命令大全
查看>>
zabbix配置及邮件短信报警
查看>>
中国开发者也可以发布WP7应用
查看>>
基于linux6.x安装xgboost
查看>>
Centos7使用mailx发送邮件
查看>>
我为什么不用 Linux 作为我的桌面系统
查看>>
Linux系统结构目录、ls命令、文件类型、alias命令笔记
查看>>
20种新颖的按钮风格和效果【附源码下载】
查看>>
ASP.NET MVC 视图(五)
查看>>
springboot 注入 restTemplate
查看>>
新建swap分区的规划、挂载和自动挂载示例
查看>>
ubuntu ufw使用规则
查看>>