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

flag_b와 flag_c는 ‘/’ 방향과 ‘ / ’ 방향의 대각선 위에 퀸을 배치했는지 체크하는 배열입니다

                   (그림 5-21).
                      실습 5-9의 프로그램에서는 실습 5-8의 배열 이름 flag를 flag_a라고 바꾸었습니다.


                    a  배열 flag_b에 대응하는 라인                b b b  배열 flag_c에 대응하는 라인
                           0  1  2  3  4  5  6  7            7  8  9  10  11  12  13  14
                                      8                    6
                                      9                    5
                                      10                   4
                                      11                   3
                                      12                   2
                                      13                   1
                                      14                   0


                           j행 i열의 값은 i + j로 구합니다.             j행 i열의 값은 i - j + 7로 구합니다.

                                           [그림 5-21] 대각선에 퀸 배치하기


                   그림 5-21에서 볼 수 있듯이 j행 i열에서 각각의 대각선 방향에 대해 퀸이 배치되었을 때 체크
                   하는 배열의 인덱스는 flag_b[i + j]와 flag_c[i – j + 7]입니다. 각 칸에 퀸의 배치를 체크할 때

                   같은 행에 퀸을 배치했는지 판단하고 그런 다음 이 그림( a  ,  b )의 점선 위에 퀸을 배치했는지
                   검사합니다(실습 5-9의 회색으로 표시한 부분 참고).


                   가로 방향(같은 행), 왼쪽 대각선 방향, 오른쪽 대각선 방향 중 어느 방향이든 1개의 라인이라

                   도 퀸이 배치되었다면 그 칸에는 퀸을 놓을 필요가 없습니다. 이 경우 초록색으로 표시한 부
                   분(실습 5-9)의 실행을 건너뜁니다. 3개의 배열(flag_a, flag_b, flag_c)을 사용하는 한정 조작을
                   수행하면 8퀸 문제의 조건을 만족하는 퀸의 배치를 효율적으로 수행할 수 있습니다. 프로그

                   램을 실행하면 92개의 조합이 출력됩니다.
                      모든 프로그램의 main 함수에서 flag용 배열 요소에 0을 대입하는 for문은 생략할 수 있는데, 이는 함수 외부에서 선언한
                   변수는 항상 0으로 초기화되기 때문입니다.



                    연습       Q8  실습 5-9의 print 함수를 수정하여 전각 기호 ‘■’와 ‘□’를 사용         ■ □ □ □ □ □ □ □
                    문제      해 퀸의 배치 상황을 출력하세요.                                     □ □ □ □ □ □ ■ □
                                                                                   □ □ □ □ ■ □ □ □
                                                                                   □ □ □ □ □ □ □ ■
                                                                                   □ ■ □ □ □ □ □ □
                                                                                   □ □ □ ■ □ □ □ □
                                                                                   □ □ □ □ □ ■ □ □
                                                                                   □ □ ■ □ □ □ □ □
                             Q9  8퀸 문제를 비재귀적으로 구현한 프로그램을 작성하세요.






                   196   C 알고리즘
   191   192   193   194   195   196   197   198   199   200   201