Java实现 蓝桥杯 数独游戏
你一定听说过“数独”游戏。
如图,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。
数独的答案都是唯一的,所以,多个解也称为无解。
本图的数字据说是芬兰数学家花了3个月的时间设计出来的较难的题目。但对会使用计算机编程的你来说,恐怕易如反掌了。
本题的要求就是输入数独题目,程序输出数独的唯一解。我们保证所有已知数据的格式都是合法的,并且题目有唯一的解。
格式要求:
输入9行,每行9个数字,0代表未知,其它数字为已知。
输出9行,每行9个数字表示数独的解。
例如:
输入(即图中题目):
005300000
800000020
070010500
400005300
010070006
003200080
060500009
004000030
000009700
程序应该输出:
145327698
839654127
672918543
496185372
218473956
753296481
367542819
984761235
521839764
再例如,输入:
800000000
003600000
070090200
050007000
000045700
000100030
001000068
008500010
090000400
程序应该输出:
812753649
943682175
675491283
154237896
369845721
287169534
521974368
438526917
796318452
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 2000ms
package com.company;
import java.util.Scanner;
public class 数独 {
static int qipan[][]=new int[9][9];
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//棋盘输入
for(int i=0;i<9;i++)
{
String line=scanner.nextLine();
for(int j=0;j<9;j++)
{
qipan[i][j]=line.charAt(j)-'0';
}
}
//起始--向棋盘中填入数字
f(0, 0);
}
//向第row行line列填入数字
public static void f(int row,int line)
{
if(row==9) //当数字填满时打印输出
{
print();
return; //打印后退出程序
}
if(qipan[row][line]==0) //当前单元格中没有数字
{
for(int value=1;value<10;value++)
{
if(checkg(row, line, value)!=0&&checkrl(row, line, value)!=0) //分别进行行列检测和宫内检测
{
qipan[row][line]=value; //通过检测,将数字i填入单元格
//输入下一个空格数字
if(line<8) f(row, line+1);
else if(row<9&&line==8) f(row+1, 0);
//回溯 该点填入的数字错误 进行重置并尝试下一个未重复数字
qipan[row][line]=0;
}
}
}else //当前单元格中有数字,寻找下一单元格
{
if(line<8) f(row, line+1);
else if(row<9&&line==8) f(row+1, 0);
}
}
//宫内检测
public static int checkg(int row,int line,int value)
{
if(row>=0&&row<=2) row=0;
if(row>=3&&row<=5) row=3;
if(row>=6&&row<=8) row=6;
if(line>=0&&line<=2) line=0;
if(line>=3&&line<=5) line=3;
if(line>=6&&line<=8) line=6;
for(int i=row;i<row+3;i++)
{
for(int j=line;j<line+3;j++)
{
// System.out.println(i+" "+j);
if(qipan[i][j]==value) //有重复数字
{
return 0;
}
}
}
return 1; //无重复数字
}
//行列检测
public static int checkrl(int row,int line,int value)
{
for(int i=0;i<9;i++)
{
if(qipan[row][i]==value||qipan[i][line]==value) //行或列中有重复的数字
return 0;
}
return 1;
}
//打印
public static void print()
{
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
System.out.print(qipan[i][j]);
}
System.out.println();
}
}
}
Java实现 蓝桥杯 数独游戏的更多相关文章
- Java实现 蓝桥杯 生命游戏
标题:生命游戏 康威生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 这个游戏在一个无限大的2D网格上进行. 初始时,每个小方格中居住着一个活着或死了的细胞. 下一时刻每个细胞的状态 ...
- 日期求星期(java)-蓝桥杯
日期求星期问题(java)-蓝桥杯 1:基姆拉尔森计算公式(计算星期) 公式: int week = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; 此处y,m,d指代年 ...
- Java实现 蓝桥杯VIP 基础练习 高精度加法
java算法 蓝桥杯 高精度加法 问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数 ...
- 蓝桥杯---数独(模拟 || dfs)
[编程题](满分33分) "数独"是当下炙手可热的智力游戏.一般认为它的起源是"拉丁方块",是大数 学家欧拉于1783年发明的. 如图[1.jpg]所示:6x6 ...
- Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)
试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...
- Java实现 蓝桥杯VIP 基础练习 Sine之舞
问题描述 最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功.所以他准备和奶牛们做一个"Sine之舞"的游戏,寓教于乐,提高奶牛们的计算能力 ...
- java算法 蓝桥杯 乘法运算
问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有一行,是两个用空格隔开的数字,均在1~99之间(含1和99). 输出格式 输出为4行 ...
- java算法 蓝桥杯 扶老奶奶街
一共有5个红领巾,编号分别为A.B.C.D.E,老奶奶被他们其中一个扶过了马路. 五个红领巾各自说话: A :我和E都没有扶老奶奶 B :老奶奶是被C和E其中一个扶过大街的 C :老奶奶是被我和D其中 ...
- java算法 蓝桥杯 高精度加法
问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...
随机推荐
- python解析excel中图片+提取图片
解析表格是常用的技术.但是有些表各里面有图片怎么办?我想获得表格里面的图片,值得注意的是,图片没有位置信息,所以最好给图片进行编号,编号代表位置. 下面附上提取表格里面图片的代码.只要输出表格地址,和 ...
- git 常用 指令累积
1.查询指定文件的修改所有修改日志git log --pretty=oneline 文件名 1. git log filename 可以看到fileName相关的commit记录2. git log ...
- transition完成事件
当transition事件完成时调用函数(移动端导航的动画消失效果). <!doctype html> <html> <head> <meta charset ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场
上一篇文章(https://www.cnblogs.com/meowv/p/12896898.html)已经成功将博客项目跑起来了,那么本篇主要是将之前遗留的问题解决,现在的代码看起来可能还是比较混乱 ...
- spark机器学习从0到1支持向量机SVM(五)
分类 分类旨在将项目分为不同类别. 最常见的分类类型是二元分类,其中有两类,通常分别为正数和负数. 如果有两个以上的类别,则称为多类分类. spark.mllib支持两种线性分类方法:线性支持 ...
- RAID0、RAID1及RAID5的区别详解
目前已有的RAID(Redundant Array of Independent Disks,独立冗余磁盘阵列)技术有很多种,但是RAID0.RAID1.RAID5是最常见的几种方案. 1 RAID0 ...
- 如何使用IDEA快速创建一个springboot项目
如何使用IDEA快速创建一个springboot项目 https://jingyan.baidu.com/article/0964eca24fdd938284f53640.html
- NIO之路1--传统BIO到NIO的演变过程
一.BIO时代 BIO1.0版本 在jdk1.4之前,java网络编程都是采用的BIO模式,BIO全称是Blocking IO,也就是阻塞式IO 接下来就以拨打10086客服电话为例,介绍下BIO是如 ...
- ftp服务器搭建(一)
先安装vsftpd 发现安装yum不行 root命令下也不行 那么可以去 /var/lib/dpkg 把lock文件rm掉 然后在yum install vsftpd 发现可以了 注意:如果发现yum ...
- 控制层技术:Servlet+reflection、Struts2、Spring MVC三者之间的比较学习
Servlet Struts2 Spring MVC 处理用户提交的数据 基于MVC设计模式的Web应用程序 是一个框架 是MVC框架 导入servlet包,配置web.xml文件 web.xml & ...