N QUEEN
- テレビを見ていて
- マス目を埋めるルールによって
- n クイーン問題の解が一つ出せると思い書いてみた
- ただしこれでは本当の解ではないようだ
- クイーンの数が足りない
- 原因は...
- マスを埋める順番
- A[i,j]に代入している数が適切かどうか(minを使う必要があるかどうか)
- などだろうか
- テレビでもいっていたように
- この方法は全てのマスを埋めていて、その埋め方が主眼
- クイーン以外のマスにも規則があるはず
N<-10 A<-matrix(0,N,N) v<-1:(N^2) for (i in 1:N){ for (j in 1:N){ u0<-c(A[i,],A[,j],diag(A[max(1,i-j+1):min(i+N-j,N),max(1,j-i+1):min(j+N-i,N)]),diag(A[min(i+j-1,N):max(1,i+j-N),max(1,j+i-N):min(i+j-1,N)])) #縦横ナナメに使われている数字の集合 A[i,j]<-min(setdiff(v,u0)) #縦横ナナメに使われていない数字のうち最小の数を入れることに } } n<-c() for (i in 1:max(A)){ n<-c(n,sum(A==i)) } image(A==which(n==max(n)),col=terrain.colors(10))
- マスを埋める順番を下のようにかえても変わらないようだ
for(k in 2:(N+N)){ for(i in max(k-N,1):min((k-1),N)){ j<- min(k-i,N) #print(i);print(j) u0<-c(A[i,],A[,j],diag(A[max(1,i-j+1):min(i+N-j,N),max(1,j-i+1):min(j+N-i,N)]),diag(A[min(i+j-1,N):max(1,i+j-N),max(1,j+i-N):min(i+j-1,N)])) A[i,j]<-min(setdiff(v,u0)) } }