You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.7 KiB
71 lines
1.7 KiB
#include<bits/stdc++.h>
|
|
using namespace std;
|
|
|
|
//打印棋盘和皇后
|
|
void showQueens(int queenArr[],int nlen,int nSolution) {
|
|
//解法数量
|
|
cout<<nSolution<<endl;
|
|
|
|
for(int i = 0; i < nlen; ++i) {
|
|
//打印皇后前面的格子
|
|
for(int j = 0; j < queenArr[i]; ++j) {
|
|
cout<<"1";//空格子
|
|
}
|
|
cout<<"Q";//皇后
|
|
//打印皇后后面的格子
|
|
for(int z = 0; z < nlen-queenArr[i]-1; ++z) {
|
|
cout<<"1";
|
|
}
|
|
cout<<endl;
|
|
}
|
|
cout<<" "<<endl;
|
|
}
|
|
|
|
//判断是否符合规则
|
|
bool rule(int queenArr[]) {
|
|
//每一行,每一列去遍历
|
|
for(int i = 0; i <= 7; ++i) {
|
|
for(int j = 0; j <= i-1; ++j) {
|
|
//判断皇后是否在同一列,因为放时没有往同一行放,所以行不用判断了
|
|
if(queenArr[i] == queenArr[j]) {
|
|
return false;
|
|
}
|
|
//判断皇后是否在对角45°
|
|
if(abs(queenArr[i]-queenArr[j]) == abs(i-j)) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
//移动皇后
|
|
void enumQueensPositon(int queenArr[],int &nSolution) {
|
|
for(queenArr[0] = 0; queenArr[0] < 8; ++queenArr[0])
|
|
for(queenArr[1] = 0; queenArr[1] < 8; ++queenArr[1])
|
|
for(queenArr[2] = 0; queenArr[2] < 8; ++queenArr[2])
|
|
for(queenArr[3]=0; queenArr[3] < 8; ++queenArr[3])
|
|
for(queenArr[4] = 0; queenArr[4] < 8; ++queenArr[4])
|
|
for(queenArr[5] = 0; queenArr[5] < 8; ++queenArr[5])
|
|
for(queenArr[6] = 0; queenArr[6] < 8; ++queenArr[6])
|
|
for(queenArr[7] = 0; queenArr[7] < 8; ++queenArr[7])
|
|
{
|
|
if (!rule(queenArr)) {
|
|
continue;
|
|
} else {
|
|
++nSolution;
|
|
showQueens(queenArr ,8, nSolution);
|
|
}
|
|
}
|
|
}
|
|
|
|
int main() {
|
|
int queenArr[8]; //每个数组位表示一个皇后
|
|
int nSolution = 0;//解法数量
|
|
//开始计算
|
|
enumQueensPositon(queenArr,nSolution);
|
|
|
|
//printf("%d ",nSolution);
|
|
return 0;
|
|
}
|