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

如图,玩家需要根据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. 单片机之静态局部变量static

    HL-1慧静电子 上程序: main.c #include <reg52.h>#include "Timer.h" /********P1口低有效*********** ...

  2. python 基础应用3

    1.使用while .for循环分别打印字符串s = 'fsufhjshh3hf'中每一个元素. #使用while .for循环分别打印字符串s = 'fsufhjshh3hf'中每一个元素. s = ...

  3. 11JAVA基础-集合

    一.集合 ` 二.Collection类 Collection 是单列的顶层类. Collection是接口. 创建对象需要借助多态. //e为集合中数据类型 //ArrayList是List的实现类 ...

  4. Spring全家桶之springMVC(二)

    spring mvc中url-pattern的写法 1.设置url-pattern为*.do 之前我们在web.xml文件中配置DispatcherServlet的时候,将url-pattern配置为 ...

  5. java web基础第一次作业

    JAVA WEB基础 一.B/S架构 1.B/S架构简介: B是英文单词“Browser”的首字母,即浏览器的意思:S是英文单词“Server”的首字母,即服务器的意思.B/S就是“Browser/S ...

  6. DPDK Mbuf Library(学习笔记)

    1 Mbuf库 Mbuf库提供了分配和释放缓冲区(mbufs)的功能,DPDK应用程序可以使用这些mbufs来存储消息缓冲. 消息缓冲存储在内存池中,使用Mempool库. 数据结构rte_mbuf通 ...

  7. java判断是否是合法IP

    public boolean ipCheck(String text) { if (text != null && !text.isEmpty()) { // 定义正则表达式 Stri ...

  8. 高效、可维护、组件化的CSS

    如何写出更加高效的CSS? 主要有以下四个关键点: 高效的CSS 可维护的CSS 组件化的CSS hack-free CSS 1.书写高效的CSS代码 * 使用 外联样式 替代行间 样式或者内嵌样式. ...

  9. 玩转java反射

    玩玩JAVA反射 什么是反射 Java反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法:对于任何一个对象,都能够调用它的任何一个方法和属性:这样动态获取新的以及动态调用对象的方法 ...

  10. 基于 abp vNext 和 .NET Core 开发博客项目 - 使用Redis缓存数据

    上一篇文章(https://www.cnblogs.com/meowv/p/12943699.html)完成了项目的全局异常处理和日志记录. 在日志记录中使用的静态方法有人指出写法不是很优雅,遂优化一 ...