Почему я получаю ошибку «аргумент длины 0» при сравнении элемента массива в операторе if для задачи 8 ферзей - PullRequest
0 голосов
/ 27 апреля 2020

РЕДАКТИРОВАТЬ: у меня были некоторые проблемы с индексацией и некоторые синтаксические опечатки, я обновил свой код соответствующим образом, но я все еще получаю ту же ошибку

Я пытаюсь решить проблему 8 ферзей, используя R, но когда я запускаю свою функцию checkOpen, она возвращается с ошибкой «аргумент имеет длину 0.» Мне любопытно, почему эта ошибка происходит, любой совет о том, как исправить это, был бы очень признателен!

checkOpen <- function(board, row, col){
  for(i in col){
    if(board[row,i,]== 1){
      return(FALSE)
    }
  }
  i <- row
  j <- col
  while(i > 0 && j > 0){
    if (board[i,j,] == 1){
      return(FALSE)
    }
    i <- i-1
    j <- j-1
  }
  i <- row
  j <- col
  while(i < row && j > 0){
    if(board[i,j,] == 1){
      return(FALSE)
    }
  }
  return(TRUE)
}

placeQueenRecursive <- function(board, column){
  if(column >= col_global){
    return(TRUE)
  }
  for(i in row_global){
    if(checkOpen(board, i, column)){
      board[i,column,] <- 1
      if(placeQueenRecursive(board, column+1) == True){
        return(TRUE)}
      board[i,column,] <- 0}
      }
}

placeQueen <- function(board,queens){
  if(placeQueenRecursive(board, 0) == False){
    print("No Solution")
    return(FALSE)
  }
  print(board)
  return(TRUE)
}



queens <<- 0
row_global <<- c(1,2,3,4,5,6,7,8)
col_global <<- c(1,2,3,4,5,6,7,8)

empty <- c(0,0,0,0,0,0,0,0)

board <<- array(c(empty, empty, empty, empty, empty, empty, empty, empty), dim = c(8,8,2))
print(board[1,1,])
print(board)
placeQueen(board,queens)

...