R:遇到 N-Queens 问题

R: Having trouble with N-Queens

我目前正在尝试完成 N 皇后区问题。具体来说,它针对 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)

我遇到了几个问题。我知道 chess.piece 矩阵的行、列和对角线的总和应该是 < 1 到 return TRUE 或者如果它大于 > 0它应该 return FALSE.

到目前为止我有:

>safe <- function(a,b){
  if((sum(b[a,])<1) & (sum(b[,a])<1))
  {return(TRUE)
  }else{
    return(FALSE)
  }
}

这仅适用于 row/column,但有时 return 是 FALSE,而它应该是 TRUE。例如,当 chess.piece 设置为 c(3,6) 并且矩阵 1 位于 1,3 时,就会发生这种情况。它似乎是从 chess.piece 中取出 3 并将其与 say 列中的错误值混为一谈。为什么要这样做?

下一部分是我到底如何根据 chess.piece 位置对矩阵的对角线求和。这让我很困惑。

我是 R 的新手,想知道我是否可以采纳你们的意见。我不一定想要直接的解决方案,但一些正确方向的指示确实可以帮助我。

提前致谢,Jim.S

R方面我真的不好说,但是在判断两个皇后是否在同一条对角线上,注意:

  1. 如果两个皇后在同一条正向对角线上(如 /),则行和列的总和将始终相等。

  2. 如果两个皇后在同一条后对角线上(如 ),则行和列之间的差异将始终相等。

您忘记为 x 编制索引。试试这个功能:

safe <- function(x,y){
  if((sum(y[x[1],])<1) & (sum(y[,x[2]])<1))
  {return(TRUE)
  }else{
    return(FALSE)
  }
}