BOJ 2580潜水艦
質問する
BOJ 2580潜水艦
金色IV|白駿2580|Python 3糸草
アルゴリズム#アルゴリズム#
コード#コード#
import sys
input = sys.stdin.readline
# find empty place
def findEmpty():
for i in range(9):
for j in range(9):
if table[i][j] == 0:
return (i, j)
return (-1, -1)
# check that X can be written in (r, c)
def check(r, c, x):
# check 3 by 3 table
for i in range(3):
if x in table[3 * (r // 3) + i][3 * (c // 3) : 3 * (c // 3) + 3]:
return False
# check row, column
if x in table[r]:
return False
for i in range(9):
if x == table[i][c]:
return False
return True
def DFS():
global table
r, c = findEmpty()
if r == -1 and c == -1:
return True
else:
for nn in range(1, 10):
if check(r, c, nn):
table[r][c] = nn
# go next (recurrsive)
if DFS(): return True
# not fit - back tracking
table[r][c] = 0
return False
point = []
table = []
for _ in range(9):
table.append(list(map(int, input().split())))
# print(table)
DFS()
# print(table)
for row in table:
for col in row:
print(col, end=' ')
print()
結果
以前はアルゴリズムを勉強していたとき、数独問題を数回解くのは簡単でした.(白駿エスドックは問題が多く若干異なるがアルゴリズムはほぼ似ている)
Reference
この問題について(BOJ 2580潜水艦), 我々は、より多くの情報をここで見つけました https://velog.io/@leehe228/boj2580テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol