(1)求幂集 #include<stdio.h>#include<stdlib.h>#include<string.h>charA[]=...{'A','B','C','D'};voidpower(charflag[],inti,intn)...{if(i>n)...{for(inti=0;i<n;i++)...{if(flag[i]=='1')...{printf("%c",A[i]);}}printf(" ");}else...{char*copy=(char*)malloc(sizeof(char)*n);memcpy(copy,flag,n);//theielementexistsflag[i-1]='1';power(flag,i+1,n);//theielementdoesnotexistcopy[i-1]='0';power(copy,i+1,n);}} (2)n皇后问题 #include<stdio.h>#include<stdlib.h>#include<string.h>/**//***是否在同一列?*0:是*1:否*/intcheckCol(charflag[],inti,charj)...{for(intk=0;k<i;k++)...{if(flag[k]==j)...{return0;}}return1;}/**//***是否在同一对角线?*0:是*1:否*/intcheckDiag(charflag[],inti,charj)...{if(i==0)return1;if(flag[i-1]==j-1||flag[i-1]==j+1)...{return0;}else...{return1;}}voidtrial(charflag[],inti,intn)...{if(i>=n)...{//printcurrentsolutionfor(inti=0;i<n;i++)...{printf("%c",flag[i]);}printf(" ");}else...{for(charj='0';j<'0'+n;j++)...{if(checkCol(flag,i,j)&&checkDiag(flag,i,j))...{char*copy=(char*)malloc(sizeof(int)*n);memcpy(copy,flag,n);copy[i]=j;trial(copy,i+1,n);}}}}voidmain()...{charflag[6];intn=6;//power(flag,1,n);trial(flag,0,n);} 上面的解法是对状态空间进行先根遍历的过程。 类似的问题有:骑士,迷宫等等。