0

为了练习,我已经开始解决街头面试问题。我发现了这个皇后在船上的问题。

船上皇后区(50 分)

你有一个 N * M 棋盘,上面有一些方格被挡住了。你有多少种方法可以在棋盘上放置一个或多个皇后,使得没有两个皇后相互攻击?如果一个皇后可以通过水平、垂直或对角线移动而不经过任何被阻挡的方格而到达另一个皇后,则两个皇后会互相攻击。最多一个皇后可以放在一个正方形上。皇后不能放在被阻挡的方格上。

输入:第一行包含测试用例 T 的数量。接下来是 T 测试用例。每个测试用例的第一行包含整数 N 和 M。接下来的 N 行包含 M 个字符,每个字符代表棋盘。'#' 代表一个被阻挡的正方形和一个 '.' 表示一个未阻塞的正方形。

输出:输出包含每个测试用例所需答案的 T 行。由于答案可能非常大,因此以 1000000007 为模输出它们。

https://www.interviewstreet.com/challenges/dashboard/#problem/4e904d63c5069

我想知道解决这个问题的最佳算法是什么?

谢谢你。

4

1 回答 1

0

此页面提供了一个易于遵循的 N-Queens 问题的实现。如果你想找到所有排列,在nQueenProblem方法中,而不是使用 simple addQueen(0, queens, n);,只需使用 for 循环迭代不同的值。而不是返回正确的板,只计算板。

于 2013-01-25T00:45:29.337 回答