方块填数

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

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

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

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

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

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

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

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

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

000011

022013

221113

243333

244455

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的字母方阵,表示该解。

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

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

例如:用户输入:

000011

022013

221113

243333

244455

445555

6

02C

03B

05A

20D

35E

53F

则程序输出:

1

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

再如,用户输入:

001111

002113

022243

022443

544433

555553

7

04B

05A

13D

14C

24E

50C

51A

则程序输出:

1

D C E F B A

E F A D C B

A B F C E D

B E D A F C

F D C B A E

C A B E D F

2

D C E F B A

E F A D C B

A D F B E C

B E C A F D

F B D C A E

C A B E D F

3

D C F E B A

A E B D C F

F D A C E B

B F E A D C

E B C F A D

C A D B F E

4

D C F E B A

B E A D C F

A D C F E B

F B E A D C

E F B C A D

C A D B F E

5

D C F E B A

E F A D C B

A B C F E D

B E D A F C

F D B C A E

C A E B D F

6

D C F E B A

E F A D C B

A B D F E C

B E C A F D

F D B C A E

C A E B D F

7

D C F E B A

E F A D C B

A D B F E C

B E C A F D

F B D C A E

C A E B D F

8

D C F E B A

F E A D C B

A D B C E F

B F E A D C

E B C F A D

C A D B F E

9

D C F E B A

F E A D C B

A F C B E D

B D E A F C

E B D C A F

C A B F D E

【注意】

请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!

在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。

请把所有函数写在同一个文件中,调试好后,拷贝到【考生文件夹】下对应题号的“解答.txt”中即可。

相关的工程文件不要拷入。

源代码中不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

允许使用STL类库,但不能使用MFC或ATL等非ANSI c++标准的类库。

例如,不能使用CString类型(属于MFC类库);例如,不能使用randomize, random函数(不属于ANSI C++标准)

import java.util.ArrayList;

import java.util.Scanner;

public class Main {

public static int[][] map = new int[6][6];

public static char[][] value = new char[6][6];

public static int[][] group = new int[6][6];

public static int[][] ring = new int[6][6];

public static int[][] row = new int[6][6];

public static ArrayList list = new ArrayList();

public void init() {

for(int i = 0;i < 6;i++) {

for(int j = 0;j < 6;j++) {

value[i][j] = '-';

group[i][j] = -1;

ring[i][j] = -1;

row[i][j] = -1;

}

}

}

public boolean check(int step, int i) {

int x = step / 6;

int y = step % 6;

if(group[map[x][y]][i] == -1 && ring[x][i] == -1 && row[y][i] == -1

&& value[x][y] == '-')

return true;

return false;

}

public void dfs(int step) {

if(step == 36) {

StringBuilder temp = new StringBuilder("");

for(int i = 0;i < 6;i++) {

for(int j = 0;j < 6;j++) {

temp.append(value[i][j]);

if(j != 5)

temp.append(" ");

}

if(i != 5)

temp.append("

");

}

if(!list.contains(temp.toString()))

list.add(temp.toString());

return;

} else {

for(int i = 0;i < 6;i++) {

int x = step / 6;

int y = step % 6;

if(check(step, i)) {

group[map[x][y]][i] = 1;

ring[x][i] = 1;

row[y][i] = 1;

value[x][y] = (char) ('A' + i);

dfs(step + 1);

group[map[x][y]][i] = -1;

ring[x][i] = -1;

row[y][i] = -1;

value[x][y] = '-';

}

if(value[x][y] != '-')

dfs(step + 1);

}

}

}

public void getResult(String[] M, String[] P) {

init();

for(int i = 0;i < M.length;i++)

for(int j = 0;j < M[i].length();j++)

map[i][j] = M[i].charAt(j) - '0';

for(int i = 0;i < P.length;i++) {

int x = P[i].charAt(0) - '0';

int y = P[i].charAt(1) - '0';

int z = P[i].charAt(2) - 'A';

ring[x][z] = 1;

row[y][z] = 1;

group[map[x][y]][z] = 1;

value[x][y] = P[i].charAt(2);

}

dfs(0);

if(list.size() == 0) {

System.out.println("无解");

return;

}

for(int i = 0;i < list.size();i++) {

System.out.println((i + 1));

System.out.println(list.get(i));

}

}

public static void main(String[] args) {

Main test = new Main();

Scanner in = new Scanner(System.in);

String[] M = new String[6];

for(int i = 0;i < 6;i++)

M[i] = in.nextLine();

int n = in.nextInt();

in.nextLine();

String[] P = new String[n];

for(int i = 0;i < n;i++)

P[i] = in.nextLine();

test.getResult(M, P);

}

}

求圈地的方块数java,java实现第三届蓝桥杯方块填数相关推荐

  1. java实现第七届蓝桥杯七星填数

    七星填数 如图[图1.png]所示. 在七角星的14个节点上填入1~14 的数字,不重复,不遗漏. 要求每条直线上的四个数字之和必须相等. 图中已经给出了3个数字. 请计算其它位置要填充的数字,答案唯 ...

  2. 求圈地的方块数java_[玩家教程]如何用Residence插件圈地及进行其他操作

    圈地对新手玩家可算是件大事,(领地插件下载)当然对大部分小白玩家来说理解圈地的确不太容易,而领地插件自带的命令显得过于死板,下面假设圈地工具为线,用图解来解释圈地.以下教程以服主的口气编辑,大家可以直 ...

  3. java实现第七届蓝桥杯方格填数

    方格填数 题目描述 如下的10个格子+--+--+--+| | | | +--+--+--+--+ | | | | | +--+--+--+--+ | | | | +--+--+--+(如果显示有问题 ...

  4. 蓝桥杯-K好数(详解易懂)java

    蓝桥杯-K好数java 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数 ...

  5. Java算法学习:蓝桥杯——地宫寻宝(DFS+动态规划—记忆型递归)

    Java算法学习:蓝桥杯--地宫寻宝(DFS✖记忆型递归) 题目: 标题:地宫取宝X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签.地宫的入口在左上角,出 ...

  6. java蓝桥杯练习 幸运数

    java蓝桥杯练习 幸运数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成. 首先从1开始写出 ...

  7. 蓝桥杯java初赛本科组,2012年第三届蓝桥杯全国软件专业人才设计与开发大赛Java本科组初赛试题...

    这是2012年第三届蓝桥杯全国软件专业人才设计与开发大赛Java本科组初赛试题的完整版 2012第三届蓝桥杯软件大赛Java语言本科组初赛试题 (说明:1-4题为结果填空,5-7为程序填空,8-10为 ...

  8. Java实现第九届蓝桥杯小朋友崇拜圈

    小朋友崇拜圈 题目描述 班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己). 在一个游戏中,需要小朋友坐一个圈, 每个小朋友都有自己最崇拜的小朋友在他的右手边. 求满足条件的圈最大多少人 ...

  9. 蓝桥杯软件类比赛java,第十届蓝桥杯大赛软件类省赛

    第十届蓝桥杯大赛软件类省赛 这些题官网还没有解答的,我主要参考了b站UP主大雪菜的解法(绝大部分题先自己做了一遍),当然也网上查了一些解答,但发现现在网上的一些解法并不正确,希望可以给大家一个参考. ...

最新文章

  1. Tree Operations 打印出有向图中的环
  2. View Transform(视图变换)详解
  3. Reallusion Character Creator 3中文版
  4. MAX13085E/MAX485 _中文翻译
  5. python测试程序的qps和响应时间代码_python性能测试,请求QPS测试
  6. 将Session写入Memcache
  7. 沈逸老师ubuntu速学笔记(2)-- ubuntu16.04下 apache2.4和php7结合编译安装,并安裝PDOmysql扩展...
  8. Node.js:清理项目中的依赖
  9. Windows平台release版本内存泄漏检查办法
  10. pdf文件转换成word文本文档去水印怎么弄
  11. Qt2D游戏开发引擎QtGameEngine使用入门9——在游戏界面中添加gui按钮文本等控件
  12. 梦想家-致停不下来的我们
  13. Bert油管视频学习
  14. 计算机考研失败了还能找工作吗,考研失败了怎么办_考研失败还能找工作吗
  15. VSCode 格式化 cpp 文件时配置左大括号不换行
  16. 数据结构之树之不同种类篇
  17. Windows中软件的安装
  18. 贝塞尔曲线介绍及其应用
  19. 我喜欢的15个WordPress插件
  20. Vue 传值方式 ——子向父传递数据

热门文章

  1. 每次请求刷新token的时间
  2. 安卓移动应用开发实例_移动应用开发协会纳新 ||掌握信息,赢得未来
  3. science量子计算机,第一快讯|《Science》量子计算机被证明超越了经典计算机
  4. (转)C++优先队列中元素及结构体的排序
  5. 空间平面,空间直线及它们的方程
  6. 从CMO到龙泉寺弟子:佛法改变人生
  7. 天了噜,我国4G用户超过2亿了!
  8. IOS开发之Storyboard应用
  9. 【转】Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用...
  10. POST方式提交乱码解决