我目前正试图完成N-Queens问题。特别是它针对8x8
板上的8个皇后。
第一部分是问题。第一个是"safe"
函数,用于确定当已经在矩阵中预先分配了女王时片段是否安全。所以:
>chess.board <- matrix(data=0,8,8)
>chess.board[r,c] <- 1 #the r,c can be any row,column I choose
>chess.piece <- c(x,x) #the x,x could be for example two numbers that also represent a row and column
然后必须按照以下方式运行安全功能:
>safe(chess.piece,chess.board)
我遇到了几个问题。我理解,国际象棋棋子中矩阵的行,列和对角线的总和应为< 1
,以便返回TRUE
,或者如果超过> 0
,它应返回{{1} }}
到目前为止,我有:
FALSE
这仅适用于行/列,但有时会返回>safe <- function(a,b){
if((sum(b[a,])<1) & (sum(b[,a])<1))
{return(TRUE)
}else{
return(FALSE)
}
}
,而应该是FALSE
。例如,当chess.piece设置为c(3,6)并且矩阵1位于1,3时,会发生这种情况。它似乎是从国际象棋棋子中取出3并将其与列中的错误值混淆。为什么要这样做?
接下来的部分是我如何根据chess.piece位置对矩阵的对角线总和进行求和。这真让我感到困惑。
我对R来说相当新,并想知道我是否可以挑选你的家伙。我不一定想要一个直接的解决方案,但正确方向的一些指示确实会帮助我。
提前致谢,Jim.S
答案 0 :(得分:1)
你忘了索引x。试试这个功能:
safe <- function(x,y){
if((sum(y[x[1],])<1) & (sum(y[,x[2]])<1))
{return(TRUE)
}else{
return(FALSE)
}
}
答案 1 :(得分:0)
我无法真正对R方面说话,但在确定两个皇后是否在同一对角线上时,请注意:
如果两个皇后位于同一个前对角线(如/),则行和列的总和将始终相等。
如果两个皇后位于相同的背对角线(如),则行与列之间的差异将始终相等。