八皇后算法题

八皇后问题介绍

八皇后问题是一个古老的问题,于1848年由一位国际象棋棋手提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,如何求解?

所谓递归回溯,本质上是一种枚举法。这种方法从棋盘的第一行开始尝试摆放第一个皇后,摆放成功后,递归一层,再遵循规则在棋盘第二行来摆放第二个皇后。如果当前位置无法摆放,则向右移动一格再次尝试,如果摆放成功,则继续递归一层,摆放第三个皇后......

#include 
#include 
using namespace std;

const int MAX_NUM = 8;

int chessBoard[MAX_NUM][MAX_NUM];

///——————————>x
//|0 1 2 3 4 5 6 7 8 
//|1
//|2
//|3
//|4
//|5
//|6
//|7
//|8
//|y

//打印棋盘
void printchessBoard()
{
	for (int i = 0;i= 0)
		{
			return false;
		}

		//检查右斜线
		if(chessBoard[x+1+i][y-1-i] == 1 && x+1+i < MAX_NUM)
		{
			return false;
		}
	}
	return true;
}


bool settleQueen(int y)
{
	
	//位数超过8,说明找到了答案
	if(y == MAX_NUM)
	{
		return true;

	}

	//遍历当前行,逐一验证
	for (int i=0;i

最后的结果为

八皇后算法题_第1张图片

你可能感兴趣的:(代码学习,八皇后问题求解程序)