n-皇后问题是回溯法中经典中的经典,其基本问题描述是:在一个nxn的格子中放n个皇后,使得每个皇后不能相互攻击,任意两个皇后能够互相攻击的条件是他们在同一条对角线或者同一行或者同一列上
问题可以转换为从第0行开始放置皇后一直放到n-1行,使得每一行在放置皇后的同时,不能与前面的皇后相互攻击
即列,对角线不冲突即可(行肯定不冲突)
伪代码描述
search(cur) { //表示开始放置第cur个皇后,当然行数为cur,放置皇后的时候主要是确定cur的列
1.如果所有皇后都放置完毕,则打印出来
2.尝试将第cur个皇后放在第j列(0<=j<=n-1),如果放在某一列j使得该位置与前面cur-1个皇后不冲突,那么这个位置是合理的
可以将其放在该位置,并且在这种放置方案下继续放置第cur+1个皇后
}
c++代码描述
#include <iostream>
using namespace std;
void search(int cur, int c[], int n) {
if (cur == n) {
for