あなたの質問は混乱します。一方で、あなたはスドキの位置が有効かどうかを確認する方法を尋ねますが、この例では、プログラムが数字を置く位置を見つけるのを支援する方法を示しています(あなたのスドクをチェックするのではなく、 。
スクロールをチェックするには、各行/列/正方形の数字が有効であることを確認するだけです。これは、設定されたデータ構造で簡単に達成できます。私はアンドロイド知らないと見て時間を持っていないので、ここでは文字列の配列を受け取り、数独が有効であるかどうかを指示する簡単なPythonのコードです:
from collections import Counter
def isValidCounter(cnt):
del cnt[0]
for i in cnt:
if cnt[i] > 1:
return False
return True
def isValid(arr):
M = [[int(i) if i != '.' else 0 for i in line] for line in arr]
# rows
for i in M:
if not isValidCounter(Counter(i)):
return False
# columns
for i in xrange(9):
if not isValidCounter(Counter(M[j][i] for j in xrange(9))):
return False
# squares
squares = [
[M[0][i] for i in xrange(0, 3)] + [M[1][i] for i in xrange(0, 3)] + [M[2][i] for i in xrange(0, 3)],
[M[0][i] for i in xrange(3, 6)] + [M[1][i] for i in xrange(3, 6)] + [M[2][i] for i in xrange(3, 6)],
[M[0][i] for i in xrange(6, 9)] + [M[1][i] for i in xrange(6, 9)] + [M[2][i] for i in xrange(6, 9)],
[M[3][i] for i in xrange(0, 3)] + [M[4][i] for i in xrange(0, 3)] + [M[5][i] for i in xrange(0, 3)],
[M[3][i] for i in xrange(3, 6)] + [M[4][i] for i in xrange(3, 6)] + [M[5][i] for i in xrange(3, 6)],
[M[3][i] for i in xrange(6, 9)] + [M[4][i] for i in xrange(6, 9)] + [M[5][i] for i in xrange(6, 9)],
[M[6][i] for i in xrange(0, 3)] + [M[7][i] for i in xrange(0, 3)] + [M[8][i] for i in xrange(0, 3)],
[M[6][i] for i in xrange(3, 6)] + [M[7][i] for i in xrange(3, 6)] + [M[8][i] for i in xrange(3, 6)],
[M[6][i] for i in xrange(6, 9)] + [M[7][i] for i in xrange(6, 9)] + [M[8][i] for i in xrange(6, 9)]
]
for square in squares:
if not isValidCounter(Counter(square)):
return False
return True
そして、ここでは、この配列がどのように見えるかです:
[
"53..7....",
"6..195...",
".98....6.",
"8...6...3",
"4..8.3..1",
"7...2...6",
".6....28.",
"...419..5",
"....8..79"
]
ただのゲームはその後、入力された値が一致するかどうかをチェックする、配列内のソリューションを保存し、起動する前に、プログラムは、パズルを解く持つ問題はありますか? – Paul