问题描述
设R={ r 1 , r_2 , …, r n }R=r1,r2,…,rn是要进行排列的nn个元素。其中元素r1 , r2 , …, rnr1,r2,…,rn 可能相同。试设计一个算法, 列出RR的所有不同排列。
给定nn 以及待排列的nn个元素。计算出这nn 个元素的所有不同排列。
输入格式
第1行是元素个数n,1\le n\le 500n,1≤n≤500。
接下来的1行是待排列的nn个元素。
输出格式
计算出的nn个元素的所有不同排列。
最后1行中的数是排列总数。
输出按照字典序从小到大输出。字典序比较大小方法为从第一个数字开始比较,若不同则比较出来大小,否则接着比较第二位,直到比较出来大小位置。样例中就是按照字典序排序后的结果。
输入输出样例
输入样例
4
aacc
Copy
输出样例
aacc
acac
acca
caac
caca
ccaa
6
上代码!!!
#include<bits/stdc++.h>
using namespace std;
const int N = 505;
char s[N];
int n,a[30],len,tot;
void search(int k){
if (k==len){
tot++;
cout<<s<<endl;
return;
}
for (int i=0; i<26; i++)
if (a[i]){
s[k] = 'a'+i;
a[i]--;
search(k+1);
a[i]++;
}
}
int main(){
scanf("%d%s",&n,s);
len = strlen(s);
for (int i=0; i<len; i++)
a[s[i]-'a']++;
search(0);
printf("%d\n",tot);
return 0;
}