Я пишу код для решения головоломки судоку, используя видео , найденное на YouTube, которое кодировало тот же алгоритм с помощью Python. Этот код требует три функции, чтобы
- Найти пустой квадрат.
- вставить число в пустой квадрат.
- Проверить, является ли это число действительным для решения головоломки .
Это использует алгоритм обратного отслеживания для решателя.
У меня проблема при вызове функций вместе, где я получаю сообщение об ошибке:
Error in free_squ(x) : argument "x" is missing, with no default
In addition: Warning message:
In if (empty_sq == FALSE) { :
the condition has length > 1 and only the first element will be used
Called from: free_squ(x)
Это сбивает с толку, так как я получаю это только при запуске этого кода. Поэтому я могу написать другие функции для вызова отдельных функций для анализа аргумента, вставленного в вышележащую функцию:
function1(argument){
function2(argument){
function3(argument){
***DO STUFF***}}}
Почему для следующего кода функция внутри главной функции не распознает аргумент?
sudoku_solve <- function(x){
empty_sq <- free_squ(x) # Define a new object to give coordinates of empty square
if(empty_sq == FALSE){ # If no empty square can be found
return(x) # Return the matrix
} else{
empty_sq <- empty_sq # Pointless line kept for clarity
}
for(i in c(1:9)){ # Integers to insert into the found empty square
if(valid(x, i, empty_sq) == TRUE){ # can the intiger be placed in this square?
x[empty_sq[1], empty_sq[2]] = i # if i valid, insert into empty square
}
if(sudoku_solve()){ # are all i's valid?
return(TRUE) # All i's valid
} else{
x[empty_sq[1], empty_sq[2]] = 0 # reset the initial try and try again with another
}
}
return(FALSE)
}
Я назвал головоломку судоку «загадкой» и вызываю функцию следующим образом:
sudoku_solve(puzzle)