算法--有重复元素的排列问题
如果运行报错的话,就把for循环里面的int i挪到外面,因为我当时写的时候文件后缀名是cpp,用c做后缀的话就挪出来吧。
#include<stdio.h>
#include<stdlib.h>
int count;
void Swap(char &a,char &b){
char temp;
temp = a;
a = b;
b = temp;
}
bool isExist(char a[],int l,int r)
{
for(int i=l;i<=r-1;i++)
{
if(a[i]==a[r])
{
return true;
}
}
return false;
}
void Perm(char a[],int l,int r){
if(l==r){
for(int i=0;i<=r;i++){
printf("%c",a[i]);
}
printf("\n");
count++;
}
else{
for(int i=l;i<=r;i++){
if(isExist(a,l,i)){
continue;
}
Swap(a[l],a[i]);
Perm(a,l+1,r);
Swap(a[l],a[i]);
}
}
}
int main(){
//先输入数组元素长度
int n;
scanf("%d\n",&n);
char a[n];
for(int i=0;i<n;i++){
scanf("%c",&a[i]);
}
//向函数中传入参数(数组长度和数组)
Perm(a,0,n-1);
//输出
printf("%d",count);
return 0;
}