求圈地的方块数java,java实现第三届蓝桥杯方块填数
方块填数
“数独”是当下炙手可热的智力游戏。一般认为它的起源是“拉丁方块”,是大数学家欧拉于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实现第三届蓝桥杯方块填数相关推荐
- java实现第七届蓝桥杯七星填数
七星填数 如图[图1.png]所示. 在七角星的14个节点上填入1~14 的数字,不重复,不遗漏. 要求每条直线上的四个数字之和必须相等. 图中已经给出了3个数字. 请计算其它位置要填充的数字,答案唯 ...
- 求圈地的方块数java_[玩家教程]如何用Residence插件圈地及进行其他操作
圈地对新手玩家可算是件大事,(领地插件下载)当然对大部分小白玩家来说理解圈地的确不太容易,而领地插件自带的命令显得过于死板,下面假设圈地工具为线,用图解来解释圈地.以下教程以服主的口气编辑,大家可以直 ...
- java实现第七届蓝桥杯方格填数
方格填数 题目描述 如下的10个格子+--+--+--+| | | | +--+--+--+--+ | | | | | +--+--+--+--+ | | | | +--+--+--+(如果显示有问题 ...
- 蓝桥杯-K好数(详解易懂)java
蓝桥杯-K好数java 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数 ...
- Java算法学习:蓝桥杯——地宫寻宝(DFS+动态规划—记忆型递归)
Java算法学习:蓝桥杯--地宫寻宝(DFS✖记忆型递归) 题目: 标题:地宫取宝X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签.地宫的入口在左上角,出 ...
- java蓝桥杯练习 幸运数
java蓝桥杯练习 幸运数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成. 首先从1开始写出 ...
- 蓝桥杯java初赛本科组,2012年第三届蓝桥杯全国软件专业人才设计与开发大赛Java本科组初赛试题...
这是2012年第三届蓝桥杯全国软件专业人才设计与开发大赛Java本科组初赛试题的完整版 2012第三届蓝桥杯软件大赛Java语言本科组初赛试题 (说明:1-4题为结果填空,5-7为程序填空,8-10为 ...
- Java实现第九届蓝桥杯小朋友崇拜圈
小朋友崇拜圈 题目描述 班里N个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己). 在一个游戏中,需要小朋友坐一个圈, 每个小朋友都有自己最崇拜的小朋友在他的右手边. 求满足条件的圈最大多少人 ...
- 蓝桥杯软件类比赛java,第十届蓝桥杯大赛软件类省赛
第十届蓝桥杯大赛软件类省赛 这些题官网还没有解答的,我主要参考了b站UP主大雪菜的解法(绝大部分题先自己做了一遍),当然也网上查了一些解答,但发现现在网上的一些解法并不正确,希望可以给大家一个参考. ...
最新文章
- Tree Operations 打印出有向图中的环
- View Transform(视图变换)详解
- Reallusion Character Creator 3中文版
- MAX13085E/MAX485 _中文翻译
- python测试程序的qps和响应时间代码_python性能测试,请求QPS测试
- 将Session写入Memcache
- 沈逸老师ubuntu速学笔记(2)-- ubuntu16.04下 apache2.4和php7结合编译安装,并安裝PDOmysql扩展...
- Node.js:清理项目中的依赖
- Windows平台release版本内存泄漏检查办法
- pdf文件转换成word文本文档去水印怎么弄
- Qt2D游戏开发引擎QtGameEngine使用入门9——在游戏界面中添加gui按钮文本等控件
- 梦想家-致停不下来的我们
- Bert油管视频学习
- 计算机考研失败了还能找工作吗,考研失败了怎么办_考研失败还能找工作吗
- VSCode 格式化 cpp 文件时配置左大括号不换行
- 数据结构之树之不同种类篇
- Windows中软件的安装
- 贝塞尔曲线介绍及其应用
- 我喜欢的15个WordPress插件
- Vue 传值方式 ——子向父传递数据
热门文章
- 每次请求刷新token的时间
- 安卓移动应用开发实例_移动应用开发协会纳新 ||掌握信息,赢得未来
- science量子计算机,第一快讯|《Science》量子计算机被证明超越了经典计算机
- (转)C++优先队列中元素及结构体的排序
- 空间平面,空间直线及它们的方程
- 从CMO到龙泉寺弟子:佛法改变人生
- 天了噜,我国4G用户超过2亿了!
- IOS开发之Storyboard应用
- 【转】Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用...
- POST方式提交乱码解决