回溯法全排列
问题引入:
将 A B C全排列,并打印出全部排列可能。
#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(" "); 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; }