leetcode 52. N皇后 II----回溯篇8

2021-11-15 11:15:28 浏览数 (1)

N皇后||题解集合

  • 回溯法

回溯法

本题就是leetcode 面试题 08.12. 八皇后----回溯篇7,也就是我们回溯篇7中讲过的问题,只不过这里区别在于,第 51 题需要得到所有可能的解,这道题只需要得到可能的解的数量。因此这道题可以使用第 51 题的做法,只需要将得到所有可能的解改成得到可能的解的数量即可。

这里只演示使用回溯篇6中第一种方式的做法,详情可以去看回溯篇6

具体求解过程也不再啰嗦,详情去看回溯篇6

代码:

代码语言:javascript复制
class Solution 
{
	int sum = 0;
	vector<int> a; //用一个一维数组a来表示每个皇后的位置,a[2] = 4表示皇后的位置位于a(2, 4), 即二行四列上
public:
		int totalNQueens(int n) 
		{
			backTrace(0, n);
			return sum;
		}
	void backTrace(int n, int N)
	{
		if (n == N)//最后一个皇后放置完毕
			sum  ;
		else
		{
			//对每一列进行试探
			for (int i = 0; i < N; i  )
			{
				//将当前皇后放置在第n行,第i列上
				a.push_back(i);
				//如果当前n行i列能够放置皇后,那么就继续寻找下一个皇后的合适放置位置
				if (isValild(n))
					backTrace(n   1, N);
				//如果找到了一种解,或者当前状态无解,那么恢复到上一层的状态,去寻找其他可能解
				a.pop_back();

			}
		}
	}
	bool isValild(int n)//这里n是正在放置第几个皇后,也可以理解为正在第几行放置皇后
	{
		//第n行要放置的皇后需要和前面n-1行已经放置的皇后进行检查,看是否产生位置冲突
		for (int i = 0; i < n; i  )
		{
			if (a[n] == a[i] || abs(a[n] - a[i]) == abs(n - i))
				return false;
		}
		return true;
	}
};

0 人点赞