質問編集履歴
1
プログラム追加しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,6 +4,50 @@
|
|
4
4
|
nan = 0です。
|
5
5
|
|
6
6
|
```
|
7
|
+
nan=0
|
8
|
+
def input_helper(str_lines):
|
9
|
+
lines=str_lines.split()
|
10
|
+
#print(lines)
|
11
|
+
grid=[]
|
12
|
+
for line in lines:
|
13
|
+
grid.append([ int(c) if int(c)>0 else nan for c in list(line)])
|
14
|
+
return grid
|
15
|
+
|
16
|
+
def print_grid(grid):
|
17
|
+
str_grid = [ [ ' '+str(e) if e !=nan else ' ' for e in row ] for row in grid ]
|
18
|
+
for nth,row in enumerate(str_grid):
|
19
|
+
sub_str_list=['[']
|
20
|
+
for col in [0,3]:
|
21
|
+
sub_str_list.append( ','.join(row[col:col+3])+' | ' )
|
22
|
+
sub_str_list.append(','.join(row[6:9])+']')
|
23
|
+
line_str = ''.join(sub_str_list)
|
24
|
+
print(line_str)
|
25
|
+
if nth in [2,5]:
|
26
|
+
print('-----------'*3)
|
27
|
+
print()
|
28
|
+
|
29
|
+
#
|
30
|
+
grid_str1='''
|
31
|
+
517600034 089004000 306205090
|
32
|
+
600000010 030006047 000000000
|
33
|
+
090000078 703400560 000000000
|
34
|
+
'''
|
35
|
+
grid_prob1=input_helper(grid_str1)
|
36
|
+
print("数独問題1: grid_prob1")
|
37
|
+
print_grid(grid_prob1)
|
38
|
+
|
39
|
+
#
|
40
|
+
grid_str2='''
|
41
|
+
530070000 600195000 098000060
|
42
|
+
800060003 400803001 700020006
|
43
|
+
060000280 000419005 000080079
|
44
|
+
'''
|
45
|
+
grid_prob2=input_helper(grid_str2)
|
46
|
+
print("数独問題2: grid_prob2")
|
47
|
+
print_grid(grid_prob2)
|
48
|
+
|
49
|
+
|
50
|
+
|
7
51
|
import copy
|
8
52
|
|
9
53
|
|
@@ -89,5 +133,45 @@
|
|
89
133
|
else:
|
90
134
|
print('[BAD] find_next() does not work')
|
91
135
|
|
136
|
+
backtrack=0
|
137
|
+
def solve(grid):
|
138
|
+
global backtrack
|
139
|
+
i,j = find_next(grid)
|
140
|
+
if i<0:
|
141
|
+
return True
|
142
|
+
for e in range(1,10):
|
143
|
+
if isValid(grid,i,j,e):
|
144
|
+
grid[i][j]=e
|
145
|
+
if solve(grid):
|
146
|
+
return True
|
147
|
+
backtrack += 1
|
148
|
+
grid[i][j]=nan
|
149
|
+
return False
|
150
|
+
|
151
|
+
#---------------
|
152
|
+
|
153
|
+
def call_solve(grid):
|
154
|
+
grid_copy=copy.deepcopy(grid)
|
155
|
+
if solve(grid_copy):
|
156
|
+
print(f'succeeded in solving [backtrack={backtrack}]')
|
157
|
+
print_grid(grid_copy)
|
158
|
+
else:
|
159
|
+
print('FAIL in solving')
|
160
|
+
|
161
|
+
# ------
|
162
|
+
# 問題を解く
|
163
|
+
#
|
164
|
+
print('grid_prob1 を解く')
|
165
|
+
print_grid(grid_prob1)
|
166
|
+
call_solve(grid_prob1)
|
167
|
+
|
168
|
+
print('grid_prob2 を解く')
|
169
|
+
print_grid(grid_prob2)
|
170
|
+
call_solve(grid_prob2)
|
171
|
+
|
92
172
|
|
93
173
|
```
|
174
|
+
|
175
|
+
追記
|
176
|
+
間違えて追加修正依頼のところに書いてしまいました。
|
177
|
+
すいません。
|