数独问题---编写一个程序,通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗

本文介绍如何编写一个程序解决数独问题,遵循每个数字1-9在行、列和3x3宫内唯一出现的规则。采用回溯法,利用三个数组记录行、列和小方块的状态,并通过调整row和col找到填数字的位置。回溯函数采用boolean返回类型,找到一个解即返回true,实现一次性求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写一个程序,通过已填充的空格来解决数独问题。

一个数独的解法需遵循如下规则:

数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
空白格用 ‘.’ 表示。
在这里插入图片描述
在这里插入图片描述

思路:同样是采用回溯法,用三个数组,分别保存每一次填完数字之后,所在行,列,小方块的记录。并且数组长度都为 int[9][10],设置这种长度的原因是因为:行列小方块都各有9个,长度为10是为了对应数字1-9的下标,不要0,因此长度设为10。

回溯函数的参数是row 和 col 。这样每次在回溯前都要移动row 和 col,找到数独表中要填数字的位置(这一块代码很精髓)。

同时有一个细节要注意,每次我们在写回溯函数的时候,一般都是void返回类型,但是在这里是boolean返回类型,因为数独我们就只要找到一个解就行了,就是一直往下递归,直到终点,然后返回true即可;而在有的回溯函数中我们要找到多个解,因此在我们找到一个解之后,保存完,仍然需要回溯到之前的位置,去寻找下一个解。

详情见代码吧。

class Solution {
   

    char board[][];
    boolean[][] rowsUsed = new boolean[9][10];
    boolean[][] colsUsed = new boolean[9][10];
    boolean[][] cubeUsed = new boolean[9][<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值