#pragma once
#include <stdio.h>
#include <math.h>
#define len 8
int m = 0;
void printp(int p[len][len]) {
printf("ponit:\n");
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
printf("%d ", p[i][j]);
}
printf("\n");
}
}
int isCan(int row, int colume,int p[]) {
for (int i = 0; i < row; i++) {
if (p[i] == colume) return 0;
if (abs(row-i) == abs(colume-p[i])) return 0;
}
return 1;
}
void run(int row,int p[]) {
for(int j =0; j <len; j++){
if (isCan(row,j,p)) {
p[row] = j;
if (row == len - 1) {
printf("result:\n");
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
printf("%d ", p[i] == j ? 1 : 0);
}
printf("\n");
}
m++;
}
if (row < len - 1) {
run(row + 1, p);
}
}
}
}
void queen_main() {
int p[len];
for (int i = 0; i < len; i++) {
p[i] = -1;
}
run(0,p);
printf("解法总数: %d", m);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56