八皇后问题

#include<stdio.h>
#include<stdlib.h>


#define max 8 


int queen[max],sum = 0;//max为棋盘最大坐标,从0开始


void show() { //输出所有皇后的坐标
int i;
for(i = 0; i < max;i++) {
printf("(%d,%d)",i,queen[i]);
}
printf("\n");
sum++;
}


int check(int n) {  //检查当前列能否放置皇后
int i;
for(i = 0; i < n;i++) { //检查横排和对角线能否放置皇后
if(queen[i] == queen[n] || abs(queen[i] - queen[n]) == (n - i)){
return 1;      //不能放
}
}
return 0;
}


void put(int n) {   //回溯尝试皇后位置,n为横坐标
int i;
for( i = 0; i < max;i++){
queen[n] = i; //将皇后放到当前循环的位置
if(!check(n)) {
if(n == max - 1){
show();  
}else{
put(n + 1);
}
}
}
}


int main(){
put(0);
scanf("%d");
}

你可能感兴趣的:(c,八皇后)