18/07/30 20:47:38.02 VDHPFFBH.net
「Proglogへの入門」が届いたので読み始めたらエイトクイーンの話が載っていた。
URLリンク(ja.wikipedia.org)エイト・クイーン
チェスの盤上に、8個のクイーンを配置する。このとき、どの駒も他の駒に取られるような位置においてはいけない。クイーンの動きは、上下左右斜めの8方向に、遮る物がない限り進める。将棋の飛車と角行を合わせた動きである。
再帰呼び出しなしでRで解いてみた。
attack <- function(x){
n=length(x)
for(i in 1:(n-1)){
for(j in 1:(n-i)){
if(x[i+j]==x[i]+j | x[i+j]==x[i]-j) return(TRUE)
}
}
return(FALSE)
}
N_Queen<-function(n){
perm=gtools::permutations(n,n)
ret=apply(perm,1,attack)
perm[which(ret==FALSE),]
}
> N_Queen(8)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 5 8 6 3 7 2 4
[2,] 1 6 8 3 7 4 2 5
・・・
[92,] 8 4 1 3 6 2 7 5
Wikipediaの記載通り92通り、表示された。