这是一篇写给刚入门的同志的题解 无意冒犯大佬
题目描述
在一个nXn的国际象棋棋盘上放置n(n<=12)个皇后,使它们不能互相攻击(即任意两个皇后不能在同一行、同一列或同一对角线上)。试求出所有放置方法。
输入 输出
输入一个数n(n<=12) 输出所有的排列方案总数。
样例输入 样例输出
4 2
引入
搜索与回溯的理解
搜索?回溯?这是个什么东西?相信不少新手都问过这个问题
简单来说 搜索就是暴力枚举
具体来说 搜索是一种将所有情况一一判断,寻找满条件的答案
回溯又是什么呢
回溯通常用于遍历 这用于解决可由一种状态产生多种状态的题目
产生于搜索,回馈于搜索,搜索的高级产物,搜索的精髓所在(还有后面要学到的剪枝和记忆化)
常用于解决棋盘问题(如过河卒问题,素数环问题),放置问题(如n皇后问题,素数棋盘问题),取放问题(如01背包问题弱化版,机器分配问题)等
回溯的特性
回溯的遍历过程可近似看成一颗树,本质是递归
#include<cstdio>
using namespace std;
int f(int x)
{
int s=0;
for(int i=1;i<=x;i++)s+=f(i);