*44 数独

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

题目描述
问题描述:数独(Sudoku)是一款大众喜爱的数字逻辑游戏。玩家需要根据9X9盘面上的已知数字,推算出所有剩余空格的数字,并且满足每一行、每一列、每一个粗线宫内的数字均含1-9,并且不重复。
输入:
包含已知数字的9X9盘面数组[空缺位以数字0表示]
输出:
完整的9X9盘面数组
输入描述:
包含已知数字的9X9盘面数组[空缺位以数字0表示]
输出描述:
完整的9X9盘面数组
示例1
输入
0 9 2 4 8 1 7 6 3
4 1 3 7 6 2 9 8 5
8 6 7 3 5 9 4 1 2
6 2 4 1 9 5 3 7 8
7 5 9 8 4 3 1 2 6
1 3 8 6 2 7 5 9 4
2 7 1 5 3 8 6 4 9
3 8 6 9 1 4 2 5 7
0 4 5 2 7 6 8 3 1
输出
5 9 2 4 8 1 7 6 3
4 1 3 7 6 2 9 8 5
8 6 7 3 5 9 4 1 2
6 2 4 1 9 5 3 7 8
7 5 9 8 4 3 1 2 6
1 3 8 6 2 7 5 9 4
2 7 1 5 3 8 6 4 9
3 8 6 9 1 4 2 5 7
9 4 5 2 7 6 8 3 1

思路:判断值是否存在所在行,所在列,以及周围3*3中
递归求解,计数到81时递归结束

def check(matrix, row, col, value):
    """
    检测在(row,col)放value是否合适
    1.每行含1-9,不含重复值value
    2.每列含1-9,不含重复值value
    3.3*3区块含1-9,不含重复值value
    """
    # 检测每行
    for j in range(9):
        if matrix[row][j] == value:
            return False
    # 检测每列
    for i in range(9):
        if matrix[i][col] == value:
            return False
    # 检测元素所在3*3区域
    area_row = (row // 3) * 3
    area_col = (col // 3) * 3
    for i in range(area_row, area_row + 3):
        for j in range(area_col, area_col + 3):
            if matrix[i][j] == value:
                return False
    return True


def solveSudoku(matrix, count=0):
    """
    遍历每一个未填元素,遍历1-9替换为合适的数字
    """
    if (count == 81):  # 递归出口
        return True
    #行优先遍历
    row = count // 9  # 行标
    col = count % 9  # 列标
    if matrix[row][col] != 0:  # 已填充
        return solveSudoku(matrix, count=count + 1)
    else:  # 未填充
        for i in range(1, 10):
            if check(matrix, row, col, i):  # 找到可能的填充数
                matrix[row][col] = i
                if solveSudoku(matrix, count=count + 1):  # 是否可完成
                    return True  # 可完成
                # 不可完成
                matrix[row][col] = 0  # 回溯
        return False  # 不可完成

while True:
    try:
        matrix = []
        for i in range(9):
            matrix.append([int(i) for i in  input().split(' ')])#多维列表输入
        solveSudoku(matrix)
        for i in range(9):
            print( ' '.join(map(str, matrix[i])))
    except:
        break
数独求解程序 php版 1 数独求解程序 php版 2 3 php 4 class Sudoku { 5 var $matrix; 6 7 function __construct($arr = null) { 8 if ($arr == null) { 9 $this->clear(); 10 阅读详情

相关推荐

Java数独游戏

Java数独游戏 好玩。

华为机试-044-困难-HJ44.数独(Sudoku)

【代码】华为机试-044-困难-HJ44.数独(Sudoku)

tttzzzqqq2018的博客 806

【华为机试045】Sudoku

题目描述:问题描述:数独(Sudoku)是一款大众喜爱的字逻辑游戏。玩家需要根据9X9盘面上的已知字,推算出所有剩余空格的字,并且满足每一行、每一列、每一个粗线宫内的字均含1-9,并且不重复。输入:包含已知字的9X9盘面组[空缺位以字0表示]输出:完整的9X9盘面组Java实现:import java.util.*; public class Main { public...

KittyGirl 689

数独问题

一、问题描述数独(Sudoku)是一款大众喜爱的字逻辑游戏。玩家需要根据9X9盘面上的已知字,推算出所有剩余空格的字,并且满足每一行、每一列、每一个粗线宫内的字均含1-9,并且不重复。输入:包含已知字的9X9盘面组[空缺位以字0表示]输出:完整的9X9盘面组输入描述:包含已知字的9X9盘面组[空缺位以字0表示]输出描述:完整的9X9盘面组输入例子:0 9 2 4 8 1 7

na_beginning的专栏 1741

php 数独计算器,问题描述:数独(Sudoku)是一款大众喜爱的字逻辑游戏。玩家需要根据9X9盘面上的已知字_题来了...

这题答案不唯一的。系统给的答案:我的代码测出的答案:代码如下:#include using namespace std;bool sign = false;int num[9][9];void Output(){for (int i = 0; i < 9; i++){for (int j = 0; j < 8; j++)cout << num[i][j] << ...

weixin_39989033的博客 408

华为机试HJ44:Sudoku(数独问题,深度优先遍历DFS解法)

C++实现——Sudoku(数独问题)

翟天保的博客 1万+

codevs 数独系列 题解报告

4966 简单数独 4491 验证数独 2207 验证数独 2924 数独挑战 1174 靶形数独一共5道题目,全都和数独有关:4966 简单数独 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 某一天,小强忽然迷上了数独,他想从最简单的数独做起,即4*4的数独,然而他仍然做不出来,所以想请你帮帮他。4*4即

xu326057825的博客 1294

华为机试: HJ44 Sudoku 数独填写

二维组之数独

jianghang222的博客 1433

【教学类-43-11】 20231231 3*3宫格数独提取单元格坐标字的通用模板(做成2*2=4套、3*2=6套)

【教学类-43-11】 20231231 3*3宫格数独提取单元格坐标字的通用模板(做成2*2=4套、3*2=6套)

reasonsummer的博客 1096

java判断44幻方_java回溯算法解数独问题

本文实例为大家分享了java回溯算法解数独问题,供大家参考,具体内容如下下面来详细讲一下如何用回溯算法来解数独问题。下图是一个数独题,也是号称世界上最难的数独。当然了,对于计算机程序来说,只要算法是对的,难不难就不知道了,反正计算机又不累。回溯算法基本上就是穷举,解这种数独类的问题逻辑比较简单。不管算法懂不懂,先把类建出来,变量定义好,那放大学试卷上就是可以拿两分了。package shudu;/...

weixin_42509686的博客 179

数独

自从2006年3月10日至11日的首届数独世界锦标赛以后,数独这项游戏越来越受到人们的喜爱和重视。 据说,在2008北京奥运会上,会将数独列为一个单的项目进行比赛,冠军将有可能获得的一份巨大的奖品———HDU免费七日游外加lcy亲笔签名以及同hdu acm team合影留念的机会。 所以全球人民前仆后继,为了奖品日夜训练茶饭不思。当然也包括初学者linle,不过他太笨了又没有多少耐性,只能做

木槿花非花的博客 965

Java数独求解

package shudu; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.OutputStream; import java.io.PrintStream; import java.sql.Date; import java.util.Arrays; import java.util.HashMap; import java.util.M

tango_wolf的博客 573

n*n/九宫格数独解法及随机生成java实现,

该算法可解出任意无错误情况下的9宫格数独;理论上也能解决其他阶的同类型规则的数独。如22,33,44,55此类的。只不过耗时长短的问题。 目前代码跑出来的结果跑了22、33、4*4的解题和随机生成。 以下是具体示例: 号称最难组的运行结果: 随机生成3阶数独: 随机生成和解决2*2阶: 随机生成和解决4*4阶的: 代码都有做优化,暂时不放上来了,我也就随手记录下。感兴趣的可以问下,说不定以后会放上来。 ...

qq_43433012的博客 780

数独个人项目

1) GitHub地址 https://github.com/ChengHaoShi/Project 2) PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(小时) 实际耗时(小时) Planning 计划 1.5 1 ...

baocai9116的博客 232

数独生成算法

看到很多人写了数独终盘生成算法,于是心血来潮,自己写了一个。 一、生成规则   1、按顺序将1~9填入宫格中;   2、检查所在行、列及小九宫格是否存在相同字   3、若存在相同字则将字加1 ,重复第2步   这样就得到了初始的数独终盘,如下图    二、打乱顺序   1、随机交换某两行(只能是同一个九宫格内的两行)   2、随机交换某两列(只能是同一个九宫格内的...

ainanlei7619的博客 778

<leetcode>NO.37解数独

编写一个程序,通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则: 字1-9在每一行只能出现一次。 字1-9在每一列只能出现一次。 字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。 空白格用'.'表示。 一个数独。 答案被标成红色。 Note: 给定的数独序列只包含字1-9和字符'.'。 你可以假设给定的数独只有唯一解...

xuyuanwang19931014的博客 212

51Nod - 1211 数独 【dfs】

题目链接https://www.51nod.com/Challenge/Problem.html#!#problemId=1211 题目描述 数独游戏规则如下:在9 * 9的盘面上有些已知的字及未知的字,推理出所有未知的字,并满足每一行、每一列、每一个粗线宫内的字均含1-9,不重复。 有些局面存在多个解或无解,这属于不标准的数独。对于不标准的局面,输出No Solu...

MengHao的博客 730

Sudoku 数独游戏 果断dfs(),就是每个3*3的方格判断时要算一下,左上角方格的位置...

Problem Description Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller squares 3x3 as shown on the Figure. In some of the cells are written decimal digits ...

weixin_34221112的博客 646

1054.数独

1054.数独 Time Limit: 1000 MS Memory Limit: 32768 KBTotal Submission(s):531 Accepted Submission(s):108 Description syc最近迷上了数独这个游戏,他在完成一个数独后总要费一些时间来检查。于是他把lg作为苦力拽来帮他检...

weixin_30466039的博客 126
上一篇: 43 迷宫问题
下一篇: 45 名字的漂亮度
wenlyq
博客等级 码龄8年 15粉丝 202原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值