C/C++ 有重复元素的全排列

在这里插入图片描述

代码

#include<stdio.h>
#include<string.h>
#define N 10000
char s[N];
int n,ans;
char b[N];
int c1[N],c2[N];
bool vis[N]; 
void dfs(int p)
{
	if(p==n)
	{
		ans++;
		for(int i=0; i<n; i++)
		{
			printf("%c",b[i]);
		}
		printf("\n");
		return ;
	}
	for(int i=0; i<n; i++)
	{
		if(!i||s[i]!=s[i-1])
		{
		
//		int c1,c2;
//		c1=c2=0;
//		for(int j=0; j<p; j++) if(s[i]==b[j]) c1++;
//		for(int j=0; j<n; j++) if(s[i]==s[j]) c2++;
		if(c1[s[i]]<c2[s[i]])
		{
			c1[s[i]]++;
			b[p]=s[i];
			dfs(p+1);
			c1[s[i]]--;
		} 	
		}
	}
}

int main(){

	scanf("%d%s",&n,s);
	for(int i=0; i<strlen(s); i++) c2[s[i]]++;
	dfs(0);
	printf("%d\n",ans);
	return 0;
}

posted @ 2022-08-28 08:43  翔村亲亲鸟  阅读(58)  评论(0编辑  收藏  举报