РЕДАКТИРОВАТЬ: у меня были некоторые проблемы с индексацией и некоторые синтаксические опечатки, я обновил свой код соответствующим образом, но я все еще получаю ту же ошибку
Я пытаюсь решить проблему 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)