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

25        else {
                         26          flag[j] = 1;
                         27          set(i + 1);
                         28          flag[j] = 0;
                         29        }
                         30      }
                         31    }
                         32  }
                         33
                         34  int main(void)
                         35  {
                         36    int i;
                         37    for(i = 0; i < 8; i++)
                         38      flag[i] = 0;
                         39    set(0);
                         40
                         41    return 0;
                         42  }



                        실습 5-8의 프로그램은 flag라는 배열을 사용합니다. flag는 같은 행에 중복하여 퀸이 배치되
                        는 것을 방지하기 위한 표시(flag)입니다. j행에 퀸을 배치하면 flag[j]의 값을 1로 하고, 배치되

                        지 않은 상태의 값은 0으로 합니다. 그러면 좀 더 자세히 살펴보겠습니다. 0열에 퀸을 배치하
                        기 위해 호출한 set 함수는 먼저 0행에 퀸을 배치합니다(flag[0]의 값은 0입니다). 0행에 퀸을 배
                        치했기 때문에 flag[0]의 값을 1로 변경합니다. 그런 다음 set 함수를 재귀적으로 호출합니다.
                        이렇게 호출한 set 함수는 다음 1열에 퀸을 배치합니다(그림 5-20).



                                0행 0열에 퀸을 배치한 상태에서 1열에 퀸을 배치하는 과정

                        a  ●               0   1      0행에 이미 퀸을 배치했습니다.
                                           1   0      이 조합은 생각할 필요가 없습니다.
                                           2   0
                              ? ? ? ? ? ?  3   0
                                           4   0
                                           5   0
                                           6   0
                                           7   0
                        b  ●               0   1      1행에 퀸을 아직 배치하지 않았습니다.
                                           1   0
                                           2   0      1행에 퀸을 배치합니다.
                                           3   0
                              ? ? ? ? ? ?
                                           4   0
                                           5   0
                                           6   0
                                           7   0
                                …
                                           [그림 5-20] flag 배열을 사용한 한정 조작

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