java实现拉丁方块填数字

本文介绍了一个基于Java实现的拉丁方块填数字的解决方案。通过用户输入的拉丁方块分组和已填充的字母,程序能找出所有可能的解。详细介绍了输入输出格式,并给出了示例输入及相应的输出结果。
摘要由CSDN通过智能技术生成

“数独”是当下炙手可热的智力游戏。一般认为它的起源是“拉丁方块”,是大数学家欧拉于1783年发明的。

如图[1.jpg]所示:6x6的小格被分为6个部分(图中用不同的颜色区分),每个部分含有6个小格(以下也称为分组)。

开始的时候,某些小格中已经填写了字母(ABCDEF之一)。需要在所有剩下的小格中补填字母。

全部填好后,必须满足如下约束:

1. 所填字母只允许是A,B,C,D,E,F 中的某一个。

2. 每行的6个小格中,所填写的字母不能重复。

3. 每列的6个小格中,所填写的字母不能重复。

4. 每个分组(参见图中不同颜色表示)包含的6个小格中,所填写的字母不能重复。

为了表示上的方便,我们用下面的6阶方阵来表示图[1.jpg]对应的分组情况(组号为0~5):

022013
243333
445555

用下面的数据表示其已有字母的填写情况:

02C
03B
05A
20D
35E
53F

很明显,第一列表示行号,第二列表示列号,第三列表示填写的字母。行号、列号都从0开始计算。

一种可行的填写方案(此题刚好答案唯一)为:

E F C B D A
A C E D F B
D A B E C F
F B D C A E
B D F A E C
C E A F B D

你的任务是:编写程序,对一般的拉丁方块问题求解,如果多解,要求找到所有解。

【输入、输出格式要求】

用户首先输入6行数据,表示拉丁方块的分组情况。

接着用户输入一个整数n (n<36), 表示接下来的数据行数

接着输入n行数据,每行表示一个预先填写的字母。

程序则输出所有可能的解(各个解间的顺序不重要)。
每个解占用7行。

即,先输出一个整数,表示该解的序号(从1开始),接着输出一个6x6的字母方阵,表示该解。

解的字母之间用空格分开。

如果找不到任何满足条件的解,则输出“无解”

例如:
  • 19
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
蓝桥杯c\c++本科组决赛真题 详细 第三届“蓝桥杯”全国软件专业人才设计与创业大赛全国总决赛 C/C++程序设计本科组比赛须知(必读)  试题包含三种类型:“结果空”、“代码空”与“程序设计”,总计100分。 结果空:5分 代码空:16 分 程序设计:19+27+33 = 79分 结果空题:要求参赛选手根据题目描述直接写结果。求解方式不限。不要求源代码。 把结果空的答案存入【准考证+姓名文件夹】下对应题号的“解答.txt”中即可。 代码空题:要求参赛选手在弄清给定代码工作原理的基础上写缺失的部分,使得程序逻辑正确、完整。所写的代码不超过一条语句(即中间不能出现分号)。 把代码空的答案(仅空处的答案,不包括题面已存在的代码)存入【准考证+姓名文件夹】下对应题号的“解答.txt”中即可。 程序设计题目:要求选手设计的程序对于给定的输入能给出正确的输出结果。选手的程序只有能运行出正确结果的时候才有机会得分。注意:在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。选手的程序必须是通用的,不能只对试卷中给定的数据有效。 对每个编程题目,要求选手把所有函数写在一个文件中。调试好后,存入与【准考证+姓名文件夹】下对应题号的“解答.txt”中即可。相关的工程文件不要拷入。 对于编程题目,要求选手给出的解答完全符合ANSI C++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。 代码中允许使用STL类库,但不能使用MFC或ATL等非ANSI c++标准的类库。例如,不能使用CString类型(属于MFC类库)。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值