重复元素排列问题
【问题描述】
设R={ r1, r2 , …, rn}是要进行排列的n个元素。其中元素r1, r2 , …, rn可能相同。试设计一个算法,列出R的所有不同排列。
【编程任务】
给定n 以及待排列的n 个元素。计算出这n 个元素的所有不同排列。
【输入格式】
由perm.in输入数据。文件的第1 行是元素个数n,1≤n≤500。接下来的1 行是待排列的n个元素。
【输出格式】
计算出的n个元素的所有不同排列输出到文件perm.out中。文件最后1行中的数是排列总数。
【输入样例】
4
aacc
【输出样例】多解
aacc
acac
acca
caac
caca
ccaa
6
【代码】
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<iostream> #include<cstdio> using namespace std; int n,g=0,q[811]; char p[811]; string s; int search(int); int print(); int main() { cin>>n>>s; for(int i=0; i<n; i++) q[s[i]-96]++; search(0); cout<<g<<endl; return 0; } int search(int x) { for(int i=1; i<=26; i++) if(q[i]) { p[x]=s[i-1]; q[i]--; if(x==n-1) print(); else search(x+1); q[i]++; } } int print() { g++; for(int i=0; i<n; i++) cout<<p[i]; cout<<endl; }