R:与N-Queens有问题

时间:2017-11-09 20:00:20

标签: r n-queens

我目前正试图完成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

2 个答案:

答案 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方面说话,但在确定两个皇后是否在同一对角线上时,请注意:

  1. 如果两个皇后位于同一个前对角线(如/),则行和列的总和将始终相等。

  2. 如果两个皇后位于相同的背对角线(如),则行与列之间的差异将始终相等。