#include<stdio.h>
#define n 9
int row[n];//放置每个皇后位置的纵坐标,横坐标即皇后编号
void queen(int now){//now现在放的皇后的编号,即该皇后的横坐标
int i;
if(now==n){
for(i=0;i<n;i++){
printf("%d ",row[i]);
}
printf("\n\n");//printf("----------------------");
return;
}
int j;
for(i=0;i<n;i++){//i表示正在放的皇后的位置,即该皇后的纵坐标
for(j=0;j<now;j++){//j表示已经放好的皇后的编号
if(i==row[j]||abs(now-j)==abs(i-row[j])){//判断是否在同一列 || 是否在对角线上
//如果在同一列或者在对角线上,那正在放的皇后应该换到下一个位置,而不再和已经放好的皇后进行比较
break;
}
}
if(j==now){
//进到这里说明j==now,即已经与放好的所有皇后进行了判断,现在的位置i可行,记录当前的位置
row[now]=i;
//放下一个皇后
queen(now+1);
}
}
}
int main(){
queen(0);
return 0;
}
n后问题的c语言实现(极简)
最新推荐文章于 2024-07-09 14:26:08 发布