#include<stdio.h>
int sum=0; //存放方案数
int a[8][8]={0}; //棋盘,初始化0
int take[8][2]={0}; //存放每个满足条件皇后的位置
int test(int x,int y){ //检测是否满足条件
int i,j;
for(i=0;i<8;i++){
for(j=0;j<8;j++){
if(i==x||j==y||i+j==x+y||i-j==x-y){
if(a[i][j]) return 0; //遍历棋盘,找出x,y坐标对应的行,列与斜线,只要其中有一个放置了皇后,就不满足,return 0。
}
}
}
return 1;
}
void try(int n);
int main(void){
try(1); //从第一个皇后开始尝试放置
return 0;
}
void try(int n){
int i,j;
for(i=0;i<8;i++){
for(j=0;j<8;j++){ //i,j遍历整个棋盘,找出对于第n个皇后的所有可能位置
if(test(i,j)){ //满足条件
a[i][j]=1; //棋盘上对应的坐标标记为已放置状态
take[n-1][0]=i;
take[n-1][1]=j; //记录
if(n==8){ //8个皇后都放置完毕
sum++;
printf("第%d种:",sum);
for(i=0;i<8;i++){
printf("(%d,%d) ",take[i][0],take[i][1]);
}
printf("\n"); //输出
}
else{
try(n+1); //递归放置下一个皇后
}
a[i][j]=0; //回溯
}
}
}
}
帮忙看看哪里出错了 感觉思路很清楚 但是只能打印出一组方案