自己在學習八皇後問題中遇到理解上有問題的地方加了注釋,貼出來希望得到大家的指點:
1 //--------------------------------------------- 2 //環境:vc6.0 3 //時間:2015/9/15 4 //用途:八皇後問題求解 5 //作者:kangwei 6 //--------------------------------------------- 7 #include <stdio.h> 8 #include <malloc.h> 9 10 void search(int *C, int n, int cur) //判斷第 cur 行 11 { 12 int row, col; 13 int ok; 14 15 if(cur == n) // 排完n個皇後,打印輸出 16 { 17 printf("解:\n"); 18 for( row = 0; row < n; row++ ) 19 { 20 for(col = 0 ; col < n; col++ ) 21 { 22 if(C[row] == col) 23 { 24 printf("# "); 25 } 26 else 27 { 28 printf("0 "); 29 } 30 } 31 printf("\n"); 32 } 33 } 34 else 35 { 36 for( col = 0; col < n; col++) // 在當前行 cur 枚舉每一個位置(列) 37 { 38 ok = 1; 39 C[cur] = col; 40 for( row = 0; row < cur; row++) // 依次與前 cur 行的已放置的 皇後 判斷是否沖突 41 { 42 if( C[cur]==C[row] || C[cur]-C[row] == cur-row || C[cur]-C[row] == row-cur ) 43 { 44 ok = 0; 45 break; 46 } 47 } 48 if(ok) 49 { 50 search(C, n, cur+1); 51 } 52 } 53 } 54 } 55 56 void HuangHou(int n) 57 { 58 int *C = (int *)malloc(sizeof(int)*n); 59 search(C, n, 0); 60 free(C); 61 } 62 63 int main() 64 { 65 HuangHou(8); 66 return 0; 67 }