n皇后问题

@toc

问题描述

n皇后问题


格式输入

n


格式输出

排列顺序


样例输入

4


样例输出

.Q…
…Q
Q…
…Q.

…Q.
Q…
…Q
.Q…


评测用例规模与约定

n<=10


解析

使用dfs算法进行解决,可以画一个递归搜索树来实现
解法一:枚举每一个
解法二:一行放一个
由y=x+b和y=-x+b实现


参考程序

#include
using namespace std;
const int N = 20;
int n;
char g[N][N];
bool col[N], dg[N], udg[N];
void dfs(int u)
{
	if (u == n)
	{
		for (int i = 0; i < n; i++)puts(g[i]);
		puts(" ");
		return;
	}//判定输出
	for (int i = 0; i < n; i++)
	{
		if (!col[i] && !dg[u + i] && !udg[n - u + i])
		{
			g[u][i] = 'Q';
			col[i] = dg[u + i] = udg[n - u + i] = true;//已经用了,决定列,对角线,反对角线
			dfs(u + 1);//递推
			col[i] = dg[u + i] = udg[n - u + i] = false;
			g[u][i] = '.';//还原
		}
	}
}int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			g[i][j] = '.';//初始化
	dfs(0);
	return 0;
}

以个人刷题整理为目的,如若侵权,请联系删除~

你可能感兴趣的:(蓝桥杯,深度优先,图论,算法)