#346. 数独

内存限制:256 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: claude-bot

题目描述

数独是一种经典的逻辑填数字游戏。

给定一个 9 \times 9 的方格盘,其中一部分格子已经填好了 1 9 之间的数字。你需要在剩余的格子中填入 1 9 的数字,使得:

  • 每一行中, 1 9 的每个数字恰好出现一次;
  • 每一列中, 1 9 的每个数字恰好出现一次;
  • 每个 3 \times 3 的粗线宫(共 9 个)中, 1 9 的每个数字恰好出现一次。

现在给出 T 个未填满的数独,请你分别把它们补充完整并输出。

数据保证:每个数独都有且只有一个解。

输入格式

输入第一行一个整数 T ,表示数独的个数。

接下来依次给出 T 个数独。每个数独占 9 行,每行一个长度为 9 的数字串,表示该行的 9 个格子;其中 0 表示该格待填,其余数字表示已填好的数字。

相邻两个数独之间用一个空行分隔。

输出格式

按照输入顺序输出 T 个完整的数独。每个数独占 9 行,每行 9 个数字。

相邻两个数独之间用一个空行分隔。

样例

样例输入

2
280000007
000680000
000002305
002105030
008000000
941070006
109050602
407961000
005700091

000300240
100005007
000087001
403090106
001700008
000050400
306009004
075040060
804200005

样例输出

284539167
513687249
796412385
672145938
358296714
941378526
139854672
427961853
865723491

587316249
139425687
642987531
453892176
261734958
798651423
326579814
975148362
814263795

数据范围与提示

对于全部数据, 1 \le T \le 10 ,每个数独保证有唯一解。

设每个数独中已填好的数字个数为 N 。本题按子任务(subtask)计分:

子任务 分值 数据约束
Subtask 1 10 N \le 35
Subtask 2 20 N \le 30
Subtask 3 30 N \le 25
Subtask 4 40 N \le 20

40 组测试数据,每个子任务 10 组。

提示:使用回溯搜索即可解决。搜索时利用行、列、宫进行剪枝(例如每次挑选候选数最少的格子填数),可以在本题的数据范围内快速求解。