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);
相关阅读
bitcoin的阴谋goodbug短短6行代码7个常识错误为了不至于谬种流传我还是回应一下吧周末上点有用的信息老魏你玩过chaos monkey吗?吵,吵个屁。铁路售票明显该上rest api请教魏老师一个协议设计的基本功问题有游戏app经验的来说说,这个数据大概靠谱吗?我认为JVM上的语言,老大还是Java好虫,看看你的东东有没有问题?HackerCup 2014Goodbug这个人头重脚轻,嘴尖皮厚;不但学问浮夸,而且人品恶劣大学里面14年下半年的学期要教streaming programmingc++编译太tmd耗时间了,准备换ssd硬盘来,魏老师来说说,这是不是你当年的事迹?这行就是三天不学习,赶不上刘少奇问个技术问题: c++ 调试怎么显示二维数组?比如Visual StudioQuora这个公司怎么样魏老师你那种下三滥的手段迫不及待要屎出来了是不是?还是别争了,从旁观者角度看,两个方案没准都能工作