自己在學習八皇後問題中遇到理解上有問題的地方加了注釋,貼出來希望得到大家的指點:
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 }