dfs-揭秘n皇后问题和
首先是n皇后问题:
输入的第一行为一个整数n,表示棋盘的大小。
给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个皇后,使任意的两个皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。
接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后。
4
1111
1111
1111
1111
易错点在于对角线其实有正副对角线,如图:
主对角线:
副对角线:
主对角线中y-x有奇效
副对角线中x+y有奇效
于是我们利用三个数组来防止他们出现再同一行,用一主对角线,同一副对角线;//我们不需要对列进行标记,因为利用dfs的参数,让下一个皇后出现在下一列
利用dfs中回溯的特点
#include<iostream>
using namespace std;
char e[100][100];
int n,a[100],b[100],c[100]