题解 | #Sudoku#

Sudoku

http://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1

def myprint(matrix):
    for i in range(9):
        print(" ".join(list(map(str,matrix[i]))))

def find_zeros(matrix):
    result = []
    for i in range(9):
        for j in range(9):
            if matrix[i][j] == 0:
                result.append([i,j])
    return result

def isend(matrix):
    for l in matrix:
        if 0 in l:
            return False
    return True

def find_neighbors(matrix,i,j):
    result = []
    result.append(matrix[i])
    result.append([matrix[k][j] for k in range(9)])
    result.append([matrix[k][l] for k in range((i//3)*3,(i//3)*3+3) \
        for l in range((j//3)*3,(j//3)*3+3)])
    return result

def dfs(matrix, zeros):
    if not zeros:
        myprint(matrix)
        return -1
    n, now = len(zeros), zeros[0]
    neibor = find_neighbors(matrix,now[0],now[1])
    for i in range(1,10):
        if i not in neibor[0] and i not in neibor[1] and i not in neibor[2]:
            matrix[now[0]][now[1]] = i
            y = dfs(matrix, zeros[1:n])
            if y == 0:
                matrix[now[0]][now[1]] = 0
                continue
    return 0


matrix = []
for i in range(9):
    s = list(map(int,input().split()))
    matrix.append(s)

dfs(matrix, find_zeros(matrix))

全部评论

相关推荐

09-22 09:42
门头沟学院 Java
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务