问题
四皇后问题是一张四乘四的棋盘,在棋盘中放四颗棋子,要求如下:任意两个皇后都不能处在同一行、同一列 任意两个皇后都不能处在同一斜线上(主斜线、反斜线)。
要求
任意两个皇后都不能处在同一行、同一列
任意两个皇后都不能处在同一斜线上(主斜线、反斜线)求有几种摆法
代码
#include <iostream>
#include <cmath>
#define N 14
using namespace std;
int chess[N][N],queen[N];//定义数组
int counter,n=4;//定义边长
void placeQueen(int x){
if(x>n){//终止条件
counter++;
for(int i=1;i<5;i++){//输出皇后
cout<<queen[i];
}
cout<<endl;
return;
}
for(int i=1;i<5;i++){
bool flag=true;
for(int j=1;j<x;j++){
if(i==queen[j]){//判断能否放置
flag=false;
break;
}
if(abs(j-x)==abs(queen[j]-i)){//判断有没有在斜线上
flag=false;
break;
}
}
if(flag){
queen[x]=i;
placeQueen(x+1);
}
}
}
int main()
{
placeQueen(1);
cout<<counter<<endl;
return 0;
}
结果

给个三联吧
本文介绍了一个经典的回溯算法案例——四皇后问题的求解方法。通过递归地尝试每一种可能的皇后摆放位置,确保任意两个皇后不在同一行、列及对角线上。文章提供了一段完整的C++代码实现,并最终输出所有有效的摆放方案。
1174

被折叠的 条评论
为什么被折叠?



