回溯法全排列
問題引入:
將 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("\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; }
實例