全排列
基础
#include<string.h>
#include<algorithm>
using namespace std;
char a[1000],b[100];
int n;
bool book[100]={0};
void dfs(int step)
{
int i;
if(step==n)
{
printf("%s\n",b);
}
for(i=0;i<n;i++)
{
if(book[i]==0)
{
book[i]=1;
b[step]=a[i];
dfs(step+1);
book[i]=0;
}
}
}
int main()
{
scanf("%s",a);
n=strlen(a);
sort(a,a+n);
dfs(0);
return 0;
}
缺点不能去掉重复的
改进
#include<string.h>
#include<algorithm>
using namespace std;
char a[1000],b[100];
int n;
bool book[100]={0};
void dfs(int step)
{
int i;
if(step==n)
{
printf("%s\n",b);
}
for(i=0;i<n;i++)
{
if(book[i]==0)
{
book[i]=1;
b[step]=a[i];
dfs(step+1);
book[i]=0;
while(i<n-1&&a[i+1]==a[i])
i++;
}
}
}
int main()
{
scanf("%s",a);
n=strlen(a);
sort(a,a+n);
dfs(0);
return 0;
}
进阶
用函数
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int i,n;
char s[12];
gets(s);
n=strlen(s);
sort(s,s+n);
do{
puts(s);
// printf("\n");
}while(next_permutation(s,s+n));
}
凡岛公司福利 613人发布
查看17道真题和解析