⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 八皇后.cpp

📁 在vc6.0下用c++写的八皇后问题
💻 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 + -