N王后问题,是一个科学谜题,指的是在把N个王后放到N*N的棋盘上,结果是任何王后之间都不会彼此威胁。换句话说,每个后继的王后既不能与前面的王后在同一行、同一列,也不能位于同一对角线上。N王后问题给出了Python代码。下面是JavaScript代码,但结果有些误差,不知何故。
function conflict(state,posX) {
var posY = state.length;
for (var i=0;i<posY ;i++ )
{
var differ = Math.abs(state[i]-posX);
if (differ == 0 || differ == (posY - i))
{
return true;
}
}
return false;
}
function queens(num,state,solutions){
for (var x=0;x<num ;x++ )
{
if (!conflict(state,x))
{
if (state.length == (num-1))
{
solutions.unshift(x);
return true;
}
var result = queens(num,state.concat(x),solutions);
if (result)
{
if (state.length==0)
{
solutions.unshift(x);
continue;
}
solutions.unshift(x);
return true;
}
}
}
}
用法如下:
var result = []; queens(4,[],result); console.log(result);// [3, 1, 0, 2, 2, 0, 3, 1, 1, 3, 0, 2, 0, 3, 1, 2]
为之漫笔(李松峰),本博客专注于Web前后端技术、移动平台开发技术、交互设计和技术翻译。 