在生成1~n的排列一文中,我们获取排列时用了控制不相等来实现让每个数都不重复地出现,所以如果要生成含有重复元素的全排列,对对生成1~n的排列的程序适当修改即可。

首先,把各个元素改成用户输入,输入数组为p,然后把if(a[k]==j)改为if(a[k]==p[j]),a[cur]=j改成a[cur]=p[j],然后先把p数组中元素用模板函数sort()按从小到大排个序,接下来要更改原程序中控制元素不重复出现的部分:

for(int k=0;k<cur;k++){            if(a[k]==p[j]){ok++;break;}}

把它改为控制重复次数的代码:

 int c1=0,c2=0;for(int x=0;x<cur;x++)if(p[j]==a[x])c1++;for(int y=0;y<n;y++)if(p[j]==p[y])c2++;

判断是否接收该元素也由条件

if(c1<c2)

决定。

下面是完整代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<sstream>
#include <cstdlib>
using namespace std;void permutation(int *a,int *p,int n,int cur){if(cur==n){for(int i=0;i<n;i++)printf("%d ",a[i]);printf("\n");}else {for(int j=0;j<n;j++)if(!j||p[j]!=p[j-1]){int c1=0,c2=0;for(int x=0;x<cur;x++)if(p[j]==a[x])c1++;for(int y=0;y<n;y++)if(p[j]==p[y])c2++;if(c1<c2){a[cur]=p[j];permutation(a,p,n,cur+1);}           }}
}
int main(){int n;scanf("%d",&n);int *a=new int[n];int *p=new int[n]; for(int i=0;i<n;i++)scanf("%d",&p[i]);permutation(a,p,n,0); delete(a);delete(p);
}

算法--生成可重集排列相关推荐

  1. 生成可重集的排列(方法)

    通过暴力或者dfs的方法可以很容易地得到n个数的全排列,可生成可重集的呢,例如给出一个数组a[],要求输出这个数组的全排列,与普通的求全排列不同,数组中很可能存在重复的数,所以方法都需要改一改: DF ...

  2. (递归7)生成可重集的排列

    题目 输入数组P,并按字典序输出数组A各元素的所有全排列 P数组:是存储基本数据的 A数组:是储存答案的 cur:当前需要确定的元素位置时存答案的位数的 c1,c2:做标记,if满足条件后再进行下次递 ...

  3. 算法--生成1~n的排列

    在暴力求解法中,我们常常要用上枚举一些简单内容以便方便获得解,若要输出整数n的前n个整数的全排列,则按字典序输出为: (1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,1,2),( ...

  4. 高等组合学笔记(二)二项式系数,差分方程与重集的排列组合

    二项式恒等式 定理A (牛顿二项式定理) 若xy=yxxy=yxxy=yx, 则我们有 (x+y)n=∑k=0n(nk)xkyn−k(x+y)^n=\sum_{k=0}^n\binom{n}{k}x^ ...

  5. C语言编写Johnson-Trotter算法生成排列

    //Johnson-Trotter算法生成排列#include<stdio.h>int list[99];在这里插入代码片 int num[99]; int dir[99];int cha ...

  6. 高等组合学笔记(三): 间隔排列,投票问题,圈集排列组合与生成函数简介

    文章目录 回顾 例子:(Gergonne, 1812) 例子: 投票(选举)问题 圈集的排列与组合 生成函数(发生函数, 母函数,generating function) 分类 回顾 例题: 设 S ...

  7. JVM(3)之垃圾回收(GC垃圾收集器+垃圾回收算法+安全点+记忆集与卡表+并发可达性分析......)

    <深入理解java虚拟机>+宋红康老师+阳哥大厂面试题2总结整理 一.堆的结构组成 堆位于运行时数据区中是线程共享的.一个进程对应一个jvm实例.一个jvm实例对应一个运行时数据区.一个运 ...

  8. MurmurHash 算法生成短链接

    生成短链接 参考 短链接设计和思考_新猿一马的博客-CSDN博客_短连接设计 https://mp.weixin.qq.com/s/dN7XZbyz5vyeJO2sd6tudA 网址大家都知道,很长的 ...

  9. php hmacsha1计算,PHP HMAC_SHA1 算法 生成算法签名

    HMAC_SHA1(Hashed Message Authentication Code, Secure Hash Algorithm)是一种安全的基于加密hash函数和共享密钥的消息认证协议. 它可 ...

最新文章

  1. android post请求_Vue 网络请求框架 axios 使用教程
  2. mac 安装淘宝镜像报错之坑
  3. 大数据技术的特点有哪些
  4. 梳理.net知识,准备考试
  5. 多层感知机BP算法推导
  6. CMD命令提示符大全
  7. 中兴C93E全光网配置
  8. mac上设定prosody 用户
  9. 软件开发人员应该了解测试和QA
  10. Java培训哪个机构比较好?怎么选?
  11. 微信屏蔽网址解决办法 如何恢复微信访问拦截 微信网页拦截怎么办
  12. 3D-AVS2参考软件RFD10.0的配置
  13. android连接小票打印机,打印小票数据的两种模式
  14. 奔三的你,是否还年轻
  15. 【VSCode】【msys2】VS Code + msys2配置Windows下C/C++开发环境
  16. 猫猫学IOS(十八)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
  17. 手游代理加盟费贵不贵?
  18. 让作业飞吧,与屌丝兄弟们分享我的分布式作业调度平台 【拥抱开源,拥抱作业调度的神器Quartz.net】...
  19. 使用反射判断对象的值是否为空并赋新值操作
  20. 浅谈宽带卫星通信系统

热门文章

  1. MCMS 基于SpringBoot 2架构
  2. centos mysql导出数据库命令_在centos(linux)下用命令导出mysql数据库数据
  3. B站一键BV号转AV号PHP单页源码
  4. 微信小程序盲盒-可对接微信支付
  5. 豆瓣的jQuery使用技巧
  6. [秘技]解决QQ音乐超出服务区域问题
  7. 使用 jQuery Mobile 与 HTML5 开发 Web App (十五) —— jQuery Mobile 与响应式
  8. Leetcode算法题(C语言)13--反转字符串
  9. SQL Server2008数据库用户管理 (第三部分)
  10. MySQL—ERROR 2002 (HY000): '/var/lib/mysql/mysql.sock'解决记录