n皇后问题求解的javascript实现
令人费解的事N皇后问题,N皇后放在nxn棋盘,没有两个皇后在同一行,同一列或同一对角线,使他们不能互相攻击。
策略
回溯。
Javascript的解决方案
以8位皇后为例:
复制代码代码如下所示:
*由cshao 12 / 28 / 14。
* /
功能getnqueens(秩序){
如果(订单< 4){
console.log(n昆斯问题申请阶大于3);
返回;
}
无功nqueens = { };
var = false;
RowLoop:
对于(var行= 0;行<顺序;行+ +){
如果(nqueens {行} = {未定义)
nqueens {行} = { };
}
对于(var = 0;
如果(nqueens { } { } = 0列COL){
继续;
否则如果}({ } {行回溯nqueens Col } = = 1){
如果(Col =一阶){
resetrow(nqueens,顺序排);
行=行- 2;
继续rowloop;
}
nqueens { } { } = 0行颜色;
回溯=假;
继续;
}
nqueens { } { } = 1行颜色;
如果(isqueenvalid(nqueens、排、Col)){
继续rowloop;
否则如果}(Col = =一阶){
回溯=真;
resetrow(nqueens,顺序排);
行=行- 2;
继续rowloop;
{人}
nqueens { } { } = 0行颜色;
继续;
};
}
}
返回nqueens;
}
功能resetrow(nqueens,顺序排){
对于(var = 0;
nqueens { } { } =定义行山坳;
}
}
功能isqueenvalid(nqueens、排、Col){
对于(var i = 0;i <;i +;+){
如果(nqueens {行} {我} = = 1){
返回false;
}
}
对于(var j=1;j <行+ 1;j + +){
如果nqueens { } {(row-j Col } = = 1 | |(nqueens } { } { row-j Col-J!nqueens { } { =定义row-j Col-J } = = 1(nqueens { } { } row-j Col + J)| |!nqueens { } { =定义row-j Col + J } = = 1)){
返回false;
}
}
返回true;
}
功能printqueens(昆斯){
对于(VAR行= 0;行< queens.length;行+ +){
无功rowtext =;
对于(VAR col = 0;Col < queens.length;胶原+ +){
如果(皇后{行}未定义){
昆斯{行} = } = 0;
}
rowtext = { } { rowtext +皇后行山坳} +;
}
console.log(rowtext);
}
}
VaR皇后= getnqueens(8);
printqueens(昆斯);
结果
复制代码代码如下所示:
一千万
00001000
0000000 1
00000 100
00100000
000000 10
01000000
00010000