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