Java实现九阶数独
你一定听说过“数独”游戏。
如【图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实现九阶数独相关推荐
- [C++] 九阶数独
这是洛谷的P1784 题目描述 数独是根据 9 * 9 盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个粗线宫内的数字均含 1 - 9,不重复.每一道合格的数独谜题都有且仅有唯 ...
- java完成九宫格数独_简单实现java数独游戏
本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下 打算把javaFx需要的组件装好以后直接用javaFx的,但似乎eclipse的版本不对,安装了也不能用... 数独代码是在之 ...
- Java破解9X9数独小游戏
背景 最近刷到LeetCode上这道有趣的题目,想起了初中时候对数独的热爱,不禁感慨万分,原来这个用编程不到1m就能出结果,害我以前还浪费了这么多时间去研究. 效果 据说这是最难的数独题目[点此链接进 ...
- java实现简单数独游戏
本来打算晚上把javaFx需要的组件装好以后直接用javaFx的,但似乎eclipse的版本不对,安装了也不能用,非洲人非了一天... 数独代码是在之前寒假受命写的,学了一个月java的成果,现在看来 ...
- 9 9简单的数独游戏python,python实现数独游戏 java简单实现数独游戏
使用python和java实现数独游戏,有比较才有收获哦. 1.Python版 #--coding:utf-8-- import random import itertools from copy i ...
- [内附完整源码和文档] 基于Java实现的数独游戏
一.本游戏背景介绍 相传数独源起于拉丁方阵(Latin Square),1970年代在美国发展,改名为数字拼图(Number Place),之后流传至日本并发扬光大,以数字智力游戏智力拼图游戏发表.在 ...
- java完成九宫格数独_数独(简易九宫格) - 小黑202的个人空间 - OSCHINA - 中文开源技术交流社区...
一.ViewController.h中代码 // // ViewController.h // ThirdSignleView // // Created by on 15/6/10. // ...
- java编写数独_求用java写一个数独游戏
展开全部 public class ShuDu { /**存储数字的数组*/ static int[][] n = new int[9][9]; /**生成随机62616964757a68696461 ...
- 一次Java解析数独的经历,java面试题,java高级笔试题
写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 1. ...
最新文章
- java的使用条件_Java使用条件语句和循环结构确定控制流
- 包学习(一款安卓端小学到高中全部课程精讲APP)
- python中参数的顺序和sys.argv顺序要一样么_Python中 sys.argv[]的用法简明解释
- android 标题栏进度圈使用方法,Android 标题栏显示进度条
- APP 自动化测试封装结构模式
- FileSystemObject详解
- cef linux 多线程模式,CEF3开发者系列之进程和线程
- iOS底层探索之类的结构(中):bits
- 【探索PowerShell 】【二】基本操作
- Linux crontab 定时任务详解
- 人脉网中应该具备的10种人
- 焦作统计年鉴 2017年
- 日语常用会话1000句
- 智能制造数据分析综合应用方案
- 物联网的媒介——java usb串口通信
- Java LeetCode每日一题-从易到难带你领略算法的魅力(一):上升下降字符串
- c语言 q15格式,DSP 数据 Q格式
- 印光大师、净空法师:法师、居士示现神通需注意哪些事项?
- R语言中Axis()函数的参数详解
- TCP/IP网络编程_第6章基于UDP的服务器端/客户端
热门文章
- CSMAR数据库券商名称简写归类
- 大话西游2服务器维护公告,《新大话西游2》2016年7月21日停机维护公告
- appserv下mysql的使用_AppServ安装并配置好MySQL环境,并用phpMyAdmin登录MySQL
- 快讯:联想收购IBM PC业务已通过美政府审查
- Android开发如何关闭GPU硬件加速
- 微服务网关鉴权:gateway使用、网关限流使用、用户密码加密、JWT鉴权
- 《英雄联盟》手游UI设计分析
- 百度、阿里、腾讯、微软的征程:刘国栋
- 【PS手绘】学习笔记一
- 2021.12.10--jQuery--8.jQuery动画简介