51. N-Queens

来源:互联网 发布:魅族手机备份数据 编辑:程序博客网 时间:2024/06/17 00:22

51. N-Queens

 
 My Submissions
  • Total Accepted: 62479
  • Total Submissions: 225904
  • Difficulty: Hard

The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.

Given an integer n, return all distinct solutions to the n-queens puzzle.

Each solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space respectively.

For example,
There exist two distinct solutions to the 4-queens puzzle:

[ [".Q..",  // Solution 1  "...Q",  "Q...",  "..Q."], ["..Q.",  // Solution 2  "Q...",  "...Q",  ".Q.."]

]

分析:n皇后问题很经典,以前上算法课的时候,老师曾仔细讲过。照着以前书上的讲解实现了一下

这里的约束条件是:任何两个皇后都不能位于同一条对角线上,也不能在同一直线上。这里安排第k个皇后放在第k行,我们要做的是找到它放在第k行的哪一列。

这里定义一个全局的变量vector<int> X,X[k]代表第k个皇后放在第k行的第X[k]列。不能在同一对角线上的表达式abs(i-k)!=abs(X[i]-X[k]),不能在同一

直线上的表达是X[i]!=X[k].这里约束条件可以用一个bool函数Place表述。进入此过程时,已经设置好了k-1个皇后的位置,此时检验第k个皇后的位置X[k]

是否与前k-1个位置有冲突。

有了place函数后,用回溯解决n皇后问题。如下所示,其中print函数将一个可行解表达出来。

0 0
原创粉丝点击