Делаешь прямоугольный массив, загоняешь исходные данные, затем рекурсивно пробегаешься по всем "заполненным" клеткам и отмечаешь по строке, столбцу и квадрату 3*3, каке решения могут быть в каждой ячейке. Таким образом, если возможное решение в данной ячейке только 1, то это оно и есть. Разные варианты могут появляться при разных обходах заполненных ячеек. Условие выхода из рекурсии - все ячейки заполнены. Результаты сравниваешь, если есть хотя бы 2 различных, вылетаешь с результатом false