1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#include<stdio.h>
#include<string.h>
char s[11],p[11],d[11],c; //p用来存放s数组(不变的) d用来记录s数组(变的)
int cd,num=0,b[11]; //b用来标记; cd记录数组的长度; num计数
void dfs(int x)
{
int i,j;
if(x==cd) //如果x的长度和cd长度一样 num++
{
num++;
if(strcmp(p,d)==0) //如果当前数组与s数组一样 就输出(num-1)因为abcd是1
{
printf("%d",num-1);
}
return ;
}
for(i=0;i<cd;i++)
{
if(!b[i])
{
d[x]=s[i]; //记录
b[i]=1; //标记
dfs(x+1); //dfs
b[i]=0; //回溯
}
}
}
int main()
{
int i,j,n=0;
scanf("%s",s); //输入
strcpy(p,s); //复制到p数组
cd=strlen(s); //记录长度
for(i=0;i<strlen(s)-1;i++) //冒泡法排序
{
for(j=0;j<strlen(s)-1-i;j++)
{
if(s[j]>s[j+1])
{
c=s[j];
s[j]=s[j+1];
s[j+1]=c;
}
}
}
memset(b,0,sizeof(b)); //把b置零 把一开始的置零也行
dfs(0); //dfs
return 0;
}
|