题目描述:
设R={ r1, r2 , …, rn}是要进行排列的n个元素。其中元素r1, r2 , …, rn均为小写字母并且可能相同。试设计一个算法,列出R的所有不同排列。
给定n 以及待排列的n 个元素。计算出这n 个元素的所有不同排列。
输入格式:
第1 行是元素个数n,1≤n≤500。接下来的1 行是待排列的n个元素。
输出格式:
计算出的n个元素的所有不同排列
最后1行中的数是排列总数
样例输入:
4 aacc
样例输出:
aacc acac acca caac caca ccaa 6
提示:
满足条件排列6个,如下:aacc acac acca caac caca ccaa
超时的同学把输出改一下,不要用cout。
比如putchar(a) 输出变量a
putchar('\n')输出换行
这是我写的:
#include <bits/stdc++.h>
using namespace std ;
char x,a[505];
int ans,c[200],n;
void dfs(int d){
if(d>n){
ans++;
for(int j=1;j<=n;j++)printf("%c",a[j]);
cout<<"\n";
return ;
}
for(char i='a';i<='z';i++)
if(c[i]>0){
a[d]=i;
c[i]--;
dfs(d+1);
c[i]++;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>x;
c[x]++;
}
dfs(1);
cout<<ans;
}