Page 195 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 195

09  /*--- 각 열에서 퀸의 위치를 출력 ---*/                                 실행 결과
                         10  void print(void)
                                                                                       0 4 7 5 2 6 1 3
                         11  {                                                         0 5 7 2 6 3 1 4
                         12     int i;                                                 0 6 3 5 7 1 4 2
                         13     for(i = 0; i < 8; i++)                                 0 6 4 7 1 3 5 2
                         14       printf("%2d", pos[i]);                               1 3 5 7 2 0 6 4
                         15     putchar('\n');                                         1 4 6 0 2 7 5 3
                                                                                       1 4 6 3 0 7 5 2
                         16  }
                                                                                         … 중략 …
                         17                                                            7 2 0 5 1 4 6 3
                         18  /*--- i열에서 알맞은 위치에 퀸을 배치 ---*/                            7 3 0 2 5 1 6 4
                         19  void set(int i)
                         20  {
                         21     int j;
                         22     for(j = 0; j < 8; j++) {
                         23       if(!flag_a[j] && !flag_b[i + j] && !flag_c[i – j + 7]) {
                         24         pos[i] = j;
                         25         if(i == 7) /* 모든 열에 배치를 마침 */
                         26           print();
                         27         else {
                         28           flag_a[j] = flag_b[i + j] = flag_c[i - j + 7] = 1;
                         29           set(i + 1);
                         30           flag_a[j] = flag_b[i + j] = flag_c[i - j + 7] = 0;
                         31         }
                         32       }
                         33     }
                         34  }
                         35
                         36  int main(void)
                         37  {
                         38     int i;
                         39     for(i = 0; i < 8; i++)
                         40       flag_a[i] = 0;
                         41     for(i = 0; i < 15; i++)
                         42       flag_b[i] = flag_c[i] = 0;
                         43     set(0);
                         44
                         45     return 0;
                         46  }









                                                                                     05•재귀 알고리즘  195
   190   191   192   193   194   195   196   197   198   199   200