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