重复元素排序问题--递归
来源:互联网 发布:java opencv 人脸 编辑:程序博客网 时间:2024/05/18 01:20
Description
设集合R={r1,r2,...,rn}是要进行排列的n个元素,其中r1,r2,...,rn可能相同。试着设计一个算法,列出R的所有不同排列。即,给定n以及待排的n个可能重复的元素。计算输出n个元素的所有不同排列。
Input
第1行是元素个数n,1<=n<=15。接下来的1行是待排列的n个元素,元素中间不要加空格。
Output
程序运行结束时,将计算输出n个元素的所有不同排列。最后1行中的数是排列总数。(说明:此题,所有计算出的排列原本是无所谓顺序的。但为了容易评判,输出结果必须唯一!现做约定:所有排列的输出顺序如课本P11的例2-4的程序段的输出顺序,区别仅是这道题是含重复元素。)
Sample Input
4aacc
代码如下:
#include <iostream>using namespace std;typedef char type;int ans = 0;/*------------识别是否重复*/bool OK(type list[] , int i , int k){ if(i > k){ for(int j = k ; j < i ; j++) if(list[j] == list[i]) return false; } return true;}/*---------------排列问题----------*/void Perm(type list[] , int k , int n){ if(k == n){ //-----输出 ans++; for(int i = 0 ; i <= n ; i++) cout<<list[i]<<" "; cout<<endl; return; } for(int i = k ; i <= n ; i++){ if(OK(list , i , k)){ swap(list[k] , list[i]);//---交换 Perm(list , k+1 , n);//-----递归调用 swap(list[k] , list[i]);//----换回来 } }}/*---------main()--------*/int main(){ int n; cin>>n; type list[n]; for(int i = 0 ; i < n ; i++) cin>>list[i]; Perm(list , 0 , n-1); cout<<ans<<endl; return 0;}
Sample Output
aaccacacaccacaaccacaccaa6
0 0
- 重复元素排序问题--递归
- 有重复元素的排序问题
- 排序单链表去重复元素
- 排序元素--递归实现
- Add Again(重复元素排序)
- 删除排序链表中重复元素
- 8594 有重复元素的排列问题(递归、字符串匹配)
- leetcode 47. Permutations II 全排列问题(去掉重复元素)+递归
- 全排列的简单递归方法(有重复元素和无重复元素的递归算法)
- 重复元素的删除问题
- 有重复元素排列问题
- ng-repeat重复元素问题
- 算法笔记 //05_有重复元素的排列问题(针对字母排序)
- 位图排序-有重复元素
- 位图排序-有重复元素 收藏
- 去除数组的重复元素并排序
- Matlab 按列排序 去掉重复元素
- 删除排序数组中重复的元素
- Jaxb annotation初步使用
- oracle常用函数(二)---日期函数
- 【贪心专题】HDU 1052 Tian Ji -- The Horse Racing (田忌赛马)
- andriod环境搭建
- Ecplise安装反编译插件
- 重复元素排序问题--递归
- 两分钟学会在GitHub托管代码
- memcache 内存管理机制
- CXF 入门:创建一个基于SOAPHeader的安全验证(CXF拦截器使用)
- Spring,java相关优秀博文地址收藏
- Poco读写XML配置文件示例
- 【蓝桥杯训练】 算法训练 K好数
- 对于ubuntu apt-get有时候报错的问题
- 深入了解javascript中的prototype与继承