n*w
2 楼
下面是N-Queen的一个native解法。该怎么推导下面算法时间复杂度O(N!*N)的*N?N!容
易看出来。这个 *N 应该是和这行if (!Valid(s, row, i)) continue;有关?
static void DFS(int[] s, int row, List
易看出来。这个 *N 应该是和这行if (!Valid(s, row, i)) continue;有关?
static void DFS(int[] s, int row, List
- > allSolutions)
{
var N = s.Length;
if (row == N)
{
var solution = s.Select(x => { var a = new bool[N]; a[x] =
true; return a; }).ToList();
allSolutions.Add(solution);
PrintSolution(solution);
return;
};
for (var i = 0; i < N; i++)
{
if (!Valid(s, row, i)) continue;
s[row] = i;
// Console.WriteLine(s.Aggregate($"{row}-", (a, n)=> $"{a} {
(n==-1?".":n.ToString())}"));
DFS(s, row + 1, allSolutions);
}
}
static private bool Valid(int[] s, int row, int col)
{
for (var i = 0; i < row; i++)
{
if (s[i] == col) return false;
if (Math.Abs(row - i) == Math.Abs(col - s[i])) return false;
}
return true;
}
static List
- > Solve(int n)
{
var allSolutions = new List
- >();
var s = new int[n];
Array.Fill(s, -1);
DFS(s, 0, allSolutions);
return allSolutions;
}
b*8
3 楼
no
d*a
4 楼
对。Valid过程的执行代价是O(N)。DFS一共被调用了N!次,每次除递归调用之外的执行
代价是O(N),所以总的代价是O(N!*N)。
【在 n*w 的大作中提到】
: 下面是N-Queen的一个native解法。该怎么推导下面算法时间复杂度O(N!*N)的*N?N!容
: 易看出来。这个 *N 应该是和这行if (!Valid(s, row, i)) continue;有关?
: static void DFS(int[] s, int row, List
代价是O(N),所以总的代价是O(N!*N)。
【在 n*w 的大作中提到】
: 下面是N-Queen的一个native解法。该怎么推导下面算法时间复杂度O(N!*N)的*N?N!容
: 易看出来。这个 *N 应该是和这行if (!Valid(s, row, i)) continue;有关?
: static void DFS(int[] s, int row, List
- > allSolutions)
: {
: var N = s.Length;
: if (row == N)
: {
: var solution = s.Select(x => { var a = new bool[N]; a[x] =
: true; return a; }).ToList();
: allSolutions.Add(solution);
相关阅读
Paypal抛弃Java是因为Douglas Crockford吗?码工发文的格式特点前端又为什么不用java呢?这个人说得这么好,居然没有人看?烙印的job security确实好nodejs 流行的原因12306最重要的是scale out和杜绝黄牛关于Startup的stack对于JAVA有一点无论谁都同意。zhaoce语录: dom是什么?我不认为12306是故意做成这样让黄牛赚钱现在.NET也往Node上转了backend language of choice360 Nian hui.....WSN. and AV girl....AWS真的好用吗?看看AirBnB为什么一定要用nodeandroid游戏刷新频率你们一般定在多少? (转载)其实板上还有几个臭皮匠的求推荐代码阅读笔记工具java是个骗人的语言