八皇后问题

自己在学习八皇后问题中遇到理解上有问题的地方加了注释,贴出来希望得到大家的指点:

 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("解:
");
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("
");
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 }