1 #include <stdio.h> 2 int AChessBlockRecorder[10]={0}/*下标层数,内容竖行*/,ThisIsMyPlace[10]={0};/*占领*/ 3 int TheTalentOfTheQueen1[25]={0}; //前一个维度代表主对角线特性,相减同 4 int TheTalentOfTheQueen2[25]={0}; 5 int total=0; 6 void output() 7 { 8 total++; 9 printf("solotion:<%d>---\n",total); 10 int q,w; 11 for(q=1;q<9;q++) 12 { 13 for(w=1;w<9;w++) 14 AChessBlockRecorder[q]==w?printf("☆"):printf("★"); 15 printf("\n"); 16 } 17 } 18 int search(int n) 19 { 20 int i; 21 for(i=1;i<=8;i++) 22 { 23 if(ThisIsMyPlace[i]==0&&TheTalentOfTheQueen1[i-n+8]==0&&TheTalentOfTheQueen2[i+n]==0) //此竖行尚未被皇后占领 24 { 25 AChessBlockRecorder[n]=i; 26 ThisIsMyPlace[i]=1; 27 TheTalentOfTheQueen1[i-n+8]=1; 28 TheTalentOfTheQueen2[i+n]=1; 29 if(n==8) output(); 30 else search(n+1); 31 TheTalentOfTheQueen1[i-n+8]=0; 32 TheTalentOfTheQueen2[i+n]=0; 33 ThisIsMyPlace[i]=0; 34 } 35 } 36 } 37 int main() 38 { 39 freopen("o.txt","w",stdout); 40 search(1); 41 return 0; 42 }
算是回溯中比较基本的了。
时间: 2024-12-14 06:27:20