|
发表于 2019-8-10 14:34:25
|
显示全部楼层
- #include <stdio.h>
- #define S 8
- int chbrd[S][S];
- int count = 0;
- void init(void){
- int i, j;
- for(i = 0; i < S; i++){
- for(j = 0; j < S; j++){
- chbrd[i][j] = 0;
- }
- }
- }
- void disp(void){
- int i, j;
- for(i = 0; i < S; i++){
- for(j = 0; j < S; j++){
- printf("%d ", chbrd[i][j]);
- }
- putchar('\n');
- }
- putchar('\n');
- }
- _Bool issafe(int x, int y){
- int i, j;
- for(i = 0; i < S; i++){
- if(chbrd[x][i] == 1){
- return 0;
- }
- }
- for(i = 0; i < S; i++){
- if(chbrd[i][y] == 1){
- return 0;
- }
- }
- for(i = x, j = y; i>=0 && j<S; i--, j++){
- if(chbrd[i][j] == 1){
- return 0;
- }
- }
- for(i = x, j = y; i>=0 && j>=0; i--, j--){
- if(chbrd[i][j] == 1){
- return 0;
- }
- }
- return 1;
- }
- void next_queen(int x){
- int i, j;
- if(x == S){
- count++;
- disp();
- return;
- }
- for(i = 0; i < S; i++){
- if(!issafe(x, i)){
- continue;
- }
- chbrd[x][i] = 1;
- next_queen(x+1);
- chbrd[x][i] = 0;
- }
- }
- int main(void){
- init();
- next_queen(0);
- printf("There are %d solutions in total.\n", count);
- return 0;
- }
复制代码 |
|