你一定听说过“数独”游戏。

如图,玩家需要根据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实现 蓝桥杯 数独游戏的更多相关文章

  1. Java实现 蓝桥杯 生命游戏

    标题:生命游戏 康威生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 这个游戏在一个无限大的2D网格上进行. 初始时,每个小方格中居住着一个活着或死了的细胞. 下一时刻每个细胞的状态 ...

  2. 日期求星期(java)-蓝桥杯

    日期求星期问题(java)-蓝桥杯 1:基姆拉尔森计算公式(计算星期) 公式: int week = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; 此处y,m,d指代年 ...

  3. Java实现 蓝桥杯VIP 基础练习 高精度加法

    java算法 蓝桥杯 高精度加法 问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数 ...

  4. 蓝桥杯---数独(模拟 || dfs)

    [编程题](满分33分) "数独"是当下炙手可热的智力游戏.一般认为它的起源是"拉丁方块",是大数 学家欧拉于1783年发明的. 如图[1.jpg]所示:6x6 ...

  5. Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)

    试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...

  6. Java实现 蓝桥杯VIP 基础练习 Sine之舞

    问题描述 最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功.所以他准备和奶牛们做一个"Sine之舞"的游戏,寓教于乐,提高奶牛们的计算能力 ...

  7. java算法 蓝桥杯 乘法运算

    问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有一行,是两个用空格隔开的数字,均在1~99之间(含1和99). 输出格式 输出为4行 ...

  8. java算法 蓝桥杯 扶老奶奶街

    一共有5个红领巾,编号分别为A.B.C.D.E,老奶奶被他们其中一个扶过了马路. 五个红领巾各自说话: A :我和E都没有扶老奶奶 B :老奶奶是被C和E其中一个扶过大街的 C :老奶奶是被我和D其中 ...

  9. java算法 蓝桥杯 高精度加法

    问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...

随机推荐

  1. [hdu3336]kmp(后缀数组)

    题意:求字符串s的所有前缀出现次数之和. http://www.cnblogs.com/jklongint/p/4446117.html 思路:用kmp做,简单且效率高.以前缀结尾的位置分类,令dp[ ...

  2. swagger集成遇到的坑一个

    SpringBoot项目集成swagger项目遇到一个问题: 访问swagger-ui.html 没有加载到数据,也没有加载到页面的html和css资源 除了 1.添加swagger的pom依赖 2. ...

  3. 【Python代码】混合整数规划MIP/线性规划LP+python(ortool库)实现

    目录 相关知识点 LP线性规划问题 MIP混合整数规划 MIP的Python实现(Ortool库) assert MIP的Python实现(docplex库) 相关知识点 LP线性规划问题 Linea ...

  4. P5410 【模板】扩展 KMP

    P5410 [模板]扩展 KMP #include<bits/stdc++.h> using namespace std; ; int q, nxt[maxn], extend[maxn] ...

  5. 爬虫之requests的请求与响应

    requests是基于urllib3的一个用于发起http请求的库(中文文档)数据采集流程: 指定url>> 基于 requests模块发起请求>> 获取响应中的数据>& ...

  6. day09作业01用户登录与验证

    import timeLoginTime = time.asctime( time.localtime(time.time()) )print ("time %s" % Login ...

  7. 201771010128王玉兰《面向对象与程序设计(Java)》第十七周学习总结

    第一部分:理论基础 线程的同步 多线程并发运行不确定性问题解决方案:引入线 程同步机制,使得另一线程要使用该方法,就只 能等待. 在Java中解决多线程同步问题的方法有两种: - Java SE 5. ...

  8. 王玉兰201771010128《面向对象程序设计(java)》第一周学习总结

    第一部分:课程准备部分 填写课程学习 平台注册账号: 平台名称 注册账号 博客园:www.cnblogs.com 夜空傅说 程序设计评测:https://pintia.cn/ 2326669056@q ...

  9. PAT-1079 Total Sales of Supply Chain (树的遍历)

    1079. Total Sales of Supply A supply chain is a network of retailers(零售商), distributors(经销商), and su ...

  10. 矩阵重叠面积计算 线段树hdu1542

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...