相信大家都遇到过,包括各种算法比赛,经常会遇到求一组数据或者单个事物或者多个事物全排列和组合的问题,那么我们该如何求呢?下面我分享给大家排列组合:
一:全排列
#include<stdio.h>
#include<string.h>
void f(char a[],int k){
int i,length;
length=strlen(a); //计算字符串的长度
if(k==length-1){
printf("%s",a); //打印字符数组a
printf("\n");
return ;
}
char t;
for(i=k;i<length;i++){
{//试探
t=a[k]; a[k]=a[i];a[i]=t;
}
f(a,k+1);
{//回溯
t=a[k]; a[k]=a[i];a[i]=t; //把上一级改变的再改变过来,防止下次递归改变a的值时,已经不是初始的a
}
}
}
int main(){
char a[4]={'A','B','C'}; //初始化字符数组a
f(a,0);
return 0;
}
二:组合问题
1.不重复的情况: