题解 | #Sudoku#

Sudoku

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

def check(sudoku,i,j):  #判断这个数填入数独的i,j位置是否合理
    for k in range(9):
        if(sudoku[i][k] == sudoku[i][j]) and (k != j): #若是这一列有重复的数据,认为这个数非法
            return False
    for k in range(9):
        if(sudoku[k][j] == sudoku[i][j]) and (k != i): #若是这一行有重复的数据,认为这个数非法
            return False
    m = 3*(i // 3) #m,n分别是i,j位置所在的3*3格子的最左上角的位置
    n = 3*(j // 3)
    for k in range(3):
        for z in range(3):
            if(sudoku[m+k][n+z] == sudoku[i][j]) and ((m+k) != i) and ((n+z) != j): #判断所在3*3格子是否有重复的数据
                return False
    return True #若都没有,那么认为这个数在重复上面没有问题
def find_sudoku(sudoku):
    for i in range(9):
        for j in range(9):
            if(sudoku[i][j] == 0): #若是找到为0的
                for t in range(1,10): #在这个位置依次填入1-9尝试
                    sudoku[i][j] = t
                    if(check(sudoku,i,j)) and (find_sudoku(sudoku)): #若是满足数独要求,而且填完这个数之后的0也能被成功填写
                        return True #认为成功
                    sudoku[i][j] = 0 #如果1-9都不行认为是之前填的数不合适,恢复这次填的数
                return False #返回之前一个false
    return True 走到这一步认为所有的空都被填满,返回成功
while True:
    try:
        sudoku = []
        sudoku_index = []
        for i in range(9): 
                a = list(map(int,input().split()))
                sudoku.append(a) #将数独输入
        find_sudoku(sudoku)
        for i in range(9):
            print(*sudoku[i])
    except:
        break


华为机试题解(prod.by kedao) 文章被收录于专栏

华为实习机试题解

全部评论
感觉是写的最清楚的 赞赞
点赞 回复 分享
发布于 2022-03-07 16:07
行列注释写反了把?
点赞 回复 分享
发布于 2022-04-05 10:59
第23行sudoku[i][j] = 0,不是又把0填回去了吗,不是数独根本没变吗?
点赞 回复 分享
发布于 2022-07-04 17:07
if(check(sudoku,i,j)) and (find_sudoku(sudoku)): 这个我改成f(find_sudoku(sudoku)) and (check(sudoku,i,j))后就输出不了结果了,不知道为什么
点赞 回复 分享
发布于 03-22 16:40 广东

相关推荐

02-24 17:39
门头沟学院 Java
神哥不得了:神哥来啦~专业技能的话建议不要前面空那么多,八股的话建议先把高频top 50的八股多巩固几遍,千万不要看那些假高频八股。项目的话,建议换两个高质量的项目上去
点赞 评论 收藏
分享
神哥不得了:神哥来啦~1.建议不要包装,很容易问穿2.没日常也能找到暑期3.简历模板换一下,字体和版式看着好难受,而且最好压缩到一页,技术的倒数第2和3重复啦,项目建议换两个高质量的上去,如果时间够的话,八股就把高频top50的题目多巩固几遍,吃透,注意不要找假高频,这样绝对能找到暑期
点赞 评论 收藏
分享
评论
18
7
分享

创作者周榜

更多
牛客网
牛客企业服务