你一定听说过“数独”游戏。
如【图1.png】,玩家需要根据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语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。

import java.util.Scanner;public class Main {public static int[][] group = new int[9][9];public static int[][] value = new int[9][9];public static int[][] row = new int[9][9];public static int[][] ring = new int[9][9];public static int[][] get_group = new int[9][9];public void init() {String[] S = new String[9];for(int i = 0;i < 3;i++) {S[i] = "000111222";S[3 + i] = "333444555";S[6 + i] = "666777888";}for(int i = 0;i < 9;i++)for(int j = 0;j < S[i].length();j++)group[i][j] = S[i].charAt(j) - '0';for(int i = 0;i < 9;i++)for(int j = 0;j < 9;j++) {row[i][j] = -1;ring[i][j] = -1;get_group[i][j] = -1;}}public void dfs(int step) {if(step == 81) {for(int i = 0;i < 9;i++) {for(int j = 0;j < 9;j++)System.out.print(value[i][j]);System.out.println();}return;} else {int x = step / 9;int y = step % 9;if(value[x][y] > 0)dfs(step + 1);else {for(int i = 1;i <= 9;i++) {if(row[x][i - 1] == -1 && ring[y][i - 1] == -1 && get_group[group[x][y]][i - 1] == -1 && value[x][y] == 0) {value[x][y] = i;row[x][i - 1] = 1;ring[y][i - 1] = 1;get_group[group[x][y]][i - 1] = 1;dfs(step + 1);value[x][y] = 0;row[x][i - 1] = -1;ring[y][i - 1] = -1;get_group[group[x][y]][i - 1] = -1;}}}}}public static void main(String[] args) {Main test = new Main();test.init();Scanner in = new Scanner(System.in);for(int i = 0;i < 9;i++) {String s = in.next();for(int j = 0;j < s.length();j++) {int t = s.charAt(j) - '0';value[i][j] = t;if(t != 0) {row[i][t - 1] = 1;ring[j][t - 1] = 1;get_group[group[i][j]][t - 1] = 1;}}}test.dfs(0);}
}

Java实现九阶数独相关推荐

  1. [C++] 九阶数独

    这是洛谷的P1784 题目描述 数独是根据 9 * 9 盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个粗线宫内的数字均含 1 - 9,不重复.每一道合格的数独谜题都有且仅有唯 ...

  2. java完成九宫格数独_简单实现java数独游戏

    本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下 打算把javaFx需要的组件装好以后直接用javaFx的,但似乎eclipse的版本不对,安装了也不能用... 数独代码是在之 ...

  3. Java破解9X9数独小游戏

    背景 最近刷到LeetCode上这道有趣的题目,想起了初中时候对数独的热爱,不禁感慨万分,原来这个用编程不到1m就能出结果,害我以前还浪费了这么多时间去研究. 效果 据说这是最难的数独题目[点此链接进 ...

  4. java实现简单数独游戏

    本来打算晚上把javaFx需要的组件装好以后直接用javaFx的,但似乎eclipse的版本不对,安装了也不能用,非洲人非了一天... 数独代码是在之前寒假受命写的,学了一个月java的成果,现在看来 ...

  5. 9 9简单的数独游戏python,python实现数独游戏 java简单实现数独游戏

    使用python和java实现数独游戏,有比较才有收获哦. 1.Python版 #--coding:utf-8-- import random import itertools from copy i ...

  6. [内附完整源码和文档] 基于Java实现的数独游戏

    一.本游戏背景介绍 相传数独源起于拉丁方阵(Latin Square),1970年代在美国发展,改名为数字拼图(Number Place),之后流传至日本并发扬光大,以数字智力游戏智力拼图游戏发表.在 ...

  7. java完成九宫格数独_数独(简易九宫格) - 小黑202的个人空间 - OSCHINA - 中文开源技术交流社区...

    一.ViewController.h中代码 // //  ViewController.h //  ThirdSignleView // //  Created by on 15/6/10. //   ...

  8. java编写数独_求用java写一个数独游戏

    展开全部 public class ShuDu { /**存储数字的数组*/ static int[][] n = new int[9][9]; /**生成随机62616964757a68696461 ...

  9. 一次Java解析数独的经历,java面试题,java高级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 1. ...

最新文章

  1. java的使用条件_Java使用条件语句和循环结构确定控制流
  2. 包学习(一款安卓端小学到高中全部课程精讲APP)
  3. python中参数的顺序和sys.argv顺序要一样么_Python中 sys.argv[]的用法简明解释
  4. android 标题栏进度圈使用方法,Android 标题栏显示进度条
  5. APP 自动化测试封装结构模式
  6. FileSystemObject详解
  7. cef linux 多线程模式,CEF3开发者系列之进程和线程
  8. iOS底层探索之类的结构(中):bits
  9. 【探索PowerShell 】【二】基本操作
  10. Linux crontab 定时任务详解
  11. 人脉网中应该具备的10种人
  12. 焦作统计年鉴 2017年
  13. 日语常用会话1000句
  14. 智能制造数据分析综合应用方案
  15. 物联网的媒介——java usb串口通信
  16. Java LeetCode每日一题-从易到难带你领略算法的魅力(一):上升下降字符串
  17. c语言 q15格式,DSP 数据 Q格式
  18. 印光大师、净空法师:法师、居士示现神通需注意哪些事项?
  19. R语言中Axis()函数的参数详解
  20. TCP/IP网络编程_第6章基于UDP的服务器端/客户端

热门文章

  1. CSMAR数据库券商名称简写归类
  2. 大话西游2服务器维护公告,《新大话西游2》2016年7月21日停机维护公告
  3. appserv下mysql的使用_AppServ安装并配置好MySQL环境,并用phpMyAdmin登录MySQL
  4. 快讯:联想收购IBM PC业务已通过美政府审查
  5. Android开发如何关闭GPU硬件加速
  6. 微服务网关鉴权:gateway使用、网关限流使用、用户密码加密、JWT鉴权
  7. 《英雄联盟》手游UI设计分析
  8. 百度、阿里、腾讯、微软的征程:刘国栋
  9. 【PS手绘】学习笔记一
  10. 2021.12.10--jQuery--8.jQuery动画简介