팔황후 - 귀속
12733 단어 팔황후
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <math.h>
5 #include "stack_seq_generic.h"
6
7 #define QUEEN 4
8
9 typedef struct{
10 int x;
11 int y;
12 } Point;
13
14 BOOL in_border(int x){
15 if (x>=0 && x<QUEEN) {
16 return TRUE;
17 }
18 return FALSE;
19 }
20
21 BOOL can_place(SqStack *s, Point *p){
22 Point *top = (Point *)s->top;
23 Point *base = (Point *)s->base;
24
25 if (!in_border(p->x) || !in_border(p->y)) {
26 return FALSE;
27 }
28
29 while (base < top) {
30 int x_dif = abs(p->x - base->x);
31 int y_dif = abs(p->y - base->y);
32
33 if (base->y==p->y || x_dif==y_dif) {
34 return FALSE;
35 }
36 base++;
37 }
38 return TRUE;
39 }
40
41 static int count = 0;
42
43 void print_queens(SqStack *s){
44 Point *top = s->top;
45 Point *base = s->base;
46
47 char area[QUEEN][QUEEN] = {0};
48 memset(area, '*', sizeof(char)*QUEEN*QUEEN);
49
50 if (top - base >= QUEEN) {
51 while (base < top) {
52 area[base->x][base->y] = '#';
53 base++;
54 }
55
56 int i,j;
57 for (i=0; i<QUEEN; i++) {
58 for (j=0; j<QUEEN; j++) {
59 printf("%c ", area[i][j]);
60 }
61 printf("
");
62 }
63 printf("
");
64
65 count++;
66 }
67
68 }
69
70 void queens_recursion(SqStack *s, Point p){
71 if (can_place(s, &p)) {
72 push(s, &p);
73 print_queens(s);
74 Point next = {p.x+1, 0};
75 queens_recursion(s, next);
76 }else{
77 if (stack_empty(s)) {
78 return;
79 }
80
81 if (!in_border(p.y) || !in_border(p.x)){
82 pop(s, &p);
83 Point next = {p.x, p.y+1};
84 queens_recursion(s, next);
85 }else{
86 Point next = {p.x, p.y+1};
87 queens_recursion(s, next);
88 }
89
90 }
91 }
92
93 int main(void){
94 SqStack stack;
95 init_stack(&stack, sizeof(Point));
96
97 //queens(&stack);
98 Point p = {0, 0};
99 queens_recursion(&stack, p);
100
101 printf("total:%d
", count);
102
103 return 0;
104 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
팔황후 - 귀속텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.