C++ 题解 (DFS) N皇后问题

Ursula ·
更新时间:2024-11-13
· 991 次阅读

引言

八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n1×n1,而皇后个数也变成n2。而且仅当 n2 ≥ 1 或 n1 ≥ 4 时问题有解。
八皇后问题最早是由国际西洋棋棋手马克斯·贝瑟尔于1848年提出。之后陆续有数学家对其进行研究,其中包括高斯和康托,并且将其推广为更一般的n皇后摆放问题。八皇后问题的第一个解是在1850年由弗朗兹·诺克给出的。诺克也是首先将问题推广到更一般的n皇后摆放问题的人之一。1874年,S.冈德尔提出了一个通过行列式来求解的方法,这个方法后来又被J.W.L.格莱舍加以改进。
艾兹格·迪科斯彻在1972年用这个问题为例来说明他所谓结构性编程的能力。
八皇后问题出现在1990年代初期的著名电子游戏《第七访客》中。

题目描述

在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。

以下是一个8*8的棋盘上一种合法的摆棋方案:
八皇后问题方案

输入

一个数字N (3 <= N <= 13) 表示棋盘是N * N大小的。

输出

输出方案数;若无方案,则输出 “no solute!”

样例 输入

4

输出

2

思路

N皇后问题就是八皇后问题的升级版嘛!用搜索算法加上适当剪枝可以解决。计算机简直就是数学家的福音
这是找到其中一个方案的过程演示:
八皇后问题演示

代码 //...

未完待续。


作者:吾大佬



n皇后 c+ dfs C++

需要 登录 后方可回复, 如果你还没有账号请 注册新账号