📄 八皇后.cpp
字号:
// 八皇后.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{
int i,j,count=0;
int &answer=count;
bool diag1[15],diag2[15],col[8];//分别用于确定某一位置的两条对角线和所处的列是否已有皇后
bool queen[8][8];//用于放置皇后的2维矩阵,表示棋盘
void setqueen(bool diag1[],bool diag2[],bool col[],bool queen[][8],int i,int &answer);
for(i=0;i<=14;i++){ //初始化判定数组,都设为0表示开始没有皇后
diag1[i]=0;
diag2[i]=0;
if(i<=7) col[i]=0;
}
for(i=0;i<=7;i++)//初始化棋盘
for(j=0;j<=7;j++)
queen[i][j]=0;
i=0;
setqueen(diag1,diag2,col,queen,i,answer);//放置皇后
cout << "共有" << answer <<"种解!"<< endl;
return 0;
}
void setqueen(bool diag1[],bool diag2[],bool col[],bool queen[][8],int i,int &answer){
void display(bool queen[][8]);
for(int j=0;j<=7;j++){
if(!diag1[i-j+7]&&!diag2[i+j]&&!col[j]){//确定对角线和该列无皇后即可放置在该位置
queen[i][j]=1;
diag1[i-j+7]=diag2[i+j]=col[j]=1;
if(i<7) setqueen(diag1,diag2,col,queen,i+1,answer);//递归调用setqueen
else {
answer++;
cout << "Solution "<< answer<<":" << endl;
display(queen);//将该情形显示出来
cout << endl;
}
queen[i][j]=0;
diag1[i-j+7]=diag2[i+j]=col[j]=0;
}
}
}
void display(bool queen[][8]){
for(int i=0;i<=7;i++){
cout << "(" <<" ";
for(int j=0;j<=7;j++)
if(queen[i][j]) cout << "Q" << " ";
else cout << "*" << " ";
cout << ")" << endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -