c++ - 支配 n 皇后谜题
问题描述
我已经解决了泛型 n-queen 问题,但我正在寻找一种算法来解决 5 个皇后统治问题,在这个问题中,你必须用 5 个皇后和 8x8 棋盘控制棋盘中的所有方格。我想为此打印所有可能的解决方案(此问题中可用的 4860 个解决方案),但我的代码不会这样做。
#include <iostream>
using namespace std;
int i;
bool q;
bool a[9];
bool b[17];
bool c[17];
int x[9];
void clear(){
for(int i = 1;i<=8;i++)
a[i] = true;
for(int i = 2;i<=16;i++)
b[i] = true;
for(int i = -7;i<=7;i++)
c[i] = true;
}
void printboard(){
cout << "Berhasil!!" << endl;
for(int j=1;j<=8;j++){
for(i=1;i<=8;i++){
if(j == x[i])
cout<<"K ";
else
cout << "* ";
}
cout << "\n";
}
}
bool isfull(){
for(int i = 1;i<=8;i++)
if(a[i] == false)
return false;
for(int i = 2;i<=16;i++)
if(b[i] == false)
return false;
for(int i = -7;i<=7;i++)
if(c[i] == false)
return false;
}
void trys(int i,bool &q,int step){
int j;
j = 0;
do{
j+=1;
q=false;
x[i] = step;
a[j] = false;
b[i+j] = false;
c[i-j] = false;
if(step<5){
trys(i+1,q,step+1);
if(!q){
a[j] = true;
b[i+j] = true;
c[i-j] = true;
}
}else{
if(isfull){
printboard();
clear();
q = true;
}
}
}while(true);
}
int main(){
clear();
// for(int i = 1;i<=8;i++)
// x[i] = true;
trys(i,q,0);
// if(q){
// cout << endl;
// printboard();
// }
}
这段代码是我从 Niklaus Wirth 那里得到的,并做了一些修改。
解决方案
推荐阅读
- mongodb - 无法启动 MongoDB,mongod 总是停止/等待
- javascript - 重定向/替换 URL Safari
- mysql - MySQL:按特定顺序按列分组(不仅仅是 ASC 或 DESC)
- r - 计算两个数据集元素之间的欧几里得距离
- twitter-bootstrap - 打开时如何替换我的菜单图标?
- r - R:循环遍历行对中的data.frame
- javascript - 代码无法正常工作,图像应该出现但不是
- linux - 列中的最小值和最大值
- haskell - “MonadReader (Foo m) m”导致函数依赖的无限类型
- mysql - Sql 在 wordpress 中的行为怪异