有重复元素的排列问题

内存限制:256 MiB
时间限制:1000 ms
标准输入输出
题目类型:传统
评测方式:文本比较

题目描述

设R={ r1, r2 , …, rn}是要进行排列的n个元素。其中元素r1, r2 , …, rn可能相同。试设计一个算法, 列出R的所有不同排列。

给定n 以及待排列的n 个元素。计算出这n 个元素的所有不同排列。

输入格式

第1 行是元素个数n,1≤n≤500。接下来的1 行是待排列的n个元素。

输出格式

计算出的n个元素的所有不同排列输出到文件perm.out中。文件最后1行中的数是排列总数。

样例

样例输入

4
aacc

样例输出

aacc
acac
acca
caac
caca
ccaa
6 

c++AC代码

#include<bits/stdc++.h>
using namespace std;
char a[100005],ans[100005];
bool flag[100005];
int sum,n;
inline void print(){
    for(int i=0;i<n;i++)printf("%c",ans[i]);
    printf("\n");
    return;
}
inline void dfs(int tot){
    if(tot==n){
        print();
        sum++;
        return;
    }
    char _flag=' ';
    for(int i=0;i<n;i++){
        if(!flag[i]&&_flag!=a[i]){
            _flag=a[i];
            ans[tot]=a[i];
            flag[i]=true;
            dfs(tot+1);
            flag[i]=false;
        }
    }
}
int main(){
    scanf("%d\n",&n);
    for(int i=0;i<n;i++)scanf("%c",&a[i]);
    sort(a,a+n);
    dfs(0);
    printf("%d",sum);
    return 0;
}
 
posted @ 2021-03-04 13:33  黄逸飞重庆八中  阅读(396)  评论(0编辑  收藏  举报