- 浏览: 5778757 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
数独的历史:
数独前身为“九宫格”,最早起源于中国。数千年前,我们的祖先就发明了洛书,其特点较之现在的数独更为复杂,要求纵向、横向、斜向上的三个数字之和等于15,而非简单的九个数字不能重复。儒家典籍《易经》中的“九宫图”也源于此,故称“洛书九宫图”。而“九宫”之名也因《易经》在中华文化发展史上的重要地位而保存、沿用至今。
1783年,瑞士数学家莱昂哈德·欧拉发明了一种当时称作“拉丁方块”(Latin Square)的游戏,这个游戏是一个n×n的数字方阵,每一行和每一列都是由不重复的n个数字或者字母组成的。
19世纪70年代,美国的一家数学逻辑游戏杂志《戴尔铅笔字谜和词语游戏》(Dell Puzzle Mαgαzines)开始刊登现在称为“数独”的这种游戏,当时人们称之为“数字拼图”(Number Place),在这个时候,9×9的81格数字游戏才开始成型。
1984年4月,在日本游戏杂志《字谜通讯Nikoil》(《パズル通信ニコリ》)上出现了“数独”游戏,提出了“独立的数字”的概念,意思就是“这个数字只能出现一次”或者“这个数字必须是惟一的”,并将这个游戏命名为“数独”(sudoku)。
实现方法:
数独前身为“九宫格”,最早起源于中国。数千年前,我们的祖先就发明了洛书,其特点较之现在的数独更为复杂,要求纵向、横向、斜向上的三个数字之和等于15,而非简单的九个数字不能重复。儒家典籍《易经》中的“九宫图”也源于此,故称“洛书九宫图”。而“九宫”之名也因《易经》在中华文化发展史上的重要地位而保存、沿用至今。
1783年,瑞士数学家莱昂哈德·欧拉发明了一种当时称作“拉丁方块”(Latin Square)的游戏,这个游戏是一个n×n的数字方阵,每一行和每一列都是由不重复的n个数字或者字母组成的。
19世纪70年代,美国的一家数学逻辑游戏杂志《戴尔铅笔字谜和词语游戏》(Dell Puzzle Mαgαzines)开始刊登现在称为“数独”的这种游戏,当时人们称之为“数字拼图”(Number Place),在这个时候,9×9的81格数字游戏才开始成型。
1984年4月,在日本游戏杂志《字谜通讯Nikoil》(《パズル通信ニコリ》)上出现了“数独”游戏,提出了“独立的数字”的概念,意思就是“这个数字只能出现一次”或者“这个数字必须是惟一的”,并将这个游戏命名为“数独”(sudoku)。
实现方法:
import java.util.Random; public class ShuDu { /** 存储数字的数组 */ private static int[][] n = new int[9][9]; /** 生成随机数字的源数组,随机数字从该数组中产生 */ private static int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; public static int[][] generateShuDu(){ // 生成数字 for (int i = 0; i < 9; i++) { // 尝试填充的数字次数 int time = 0; // 填充数字 for (int j = 0; j < 9; j++) { // 产生数字 n[i][j] = generateNum(time); // 如果返回值为0,则代表卡住,退回处理 // 退回处理的原则是:如果不是第一列,则先倒退到前一列,否则倒退到前一行的最后一列 if (n[i][j] == 0) { // 不是第一列,则倒退一列 if (j > 0) { j -= 2; continue; } else {// 是第一列,则倒退到上一行的最后一列 i--; j = 8; continue; } } // 填充成功 if (isCorret(i, j)) { // 初始化time,为下一次填充做准备 time = 0; } else { // 继续填充 // 次数增加1 time++; // 继续填充当前格 j--; } } } return n; } /** * 是否满足行、列和3X3区域不重复的要求 * * @param row * 行号 * @param col * 列号 * @return true代表符合要求 */ private static boolean isCorret(int row, int col) { return (checkRow(row) & checkLine(col) & checkNine(row, col)); } /** * 检查行是否符合要求 * * @param row * 检查的行号 * @return true代表符合要求 */ private static boolean checkRow(int row) { for (int j = 0; j < 8; j++) { if (n[row][j] == 0) { continue; } for (int k = j + 1; k < 9; k++) { if (n[row][j] == n[row][k]) { return false; } } } return true; } /** * 检查列是否符合要求 * * @param col * 检查的列号 * @return true代表符合要求 */ private static boolean checkLine(int col) { for (int j = 0; j < 8; j++) { if (n[j][col] == 0) { continue; } for (int k = j + 1; k < 9; k++) { if (n[j][col] == n[k][col]) { return false; } } } return true; } /** * 检查3X3区域是否符合要求 * * @param row * 检查的行号 * @param col * 检查的列号 * @return true代表符合要求 */ private static boolean checkNine(int row, int col) { // 获得左上角的坐标 int j = row / 3 * 3; int k = col / 3 * 3; // 循环比较 for (int i = 0; i < 8; i++) { if (n[j + i / 3][k + i % 3] == 0) { continue; } for (int m = i + 1; m < 9; m++) { if (n[j + i / 3][k + i % 3] == n[j + m / 3][k + m % 3]) { return false; } } } return true; } /** * 产生1-9之间的随机数字 规则:生成的随机数字放置在数组8-time下标的位置,随着time的增加,已经尝试过的数字将不会在取到 * 说明:即第一次次是从所有数字中随机,第二次时从前八个数字中随机,依次类推, 这样既保证随机,也不会再重复取已经不符合要求的数字,提高程序的效率 * 这个规则是本算法的核心 * * @param time * 填充的次数,0代表第一次填充 * @return */ private static Random r=new Random(); private static int generateNum(int time) { // 第一次尝试时,初始化随机数字源数组 if (time == 0) { for (int i = 0; i < 9; i++) { num[i] = i + 1; } } // 第10次填充,表明该位置已经卡住,则返回0,由主程序处理退回 if (time == 9) { return 0; } // 不是第一次填充 // 生成随机数字,该数字是数组的下标,取数组num中该下标对应的数字为随机数字 // int ranNum = (int) (Math.random() * (9 - time));//j2se int ranNum=r.nextInt(9 - time);//j2me // 把数字放置在数组倒数第time个位置, int temp = num[8 - time]; num[8 - time] = num[ranNum]; num[ranNum] = temp; // 返回数字 return num[8 - time]; } public static void main(String[] args) { int[][] shuDu=generateShuDu(); // 输出结果 for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { System.out.print(shuDu[i][j] + " "); } System.out.println(); } } }
发表评论
-
3个RPG练习,最后一个是卡马克卷轴
2010-12-11 18:02 2312import javax.microedition.lcd ... -
j2me小练习,教学用
2010-12-07 20:42 1806有用的J2ME功能函数 ... -
自己早期做的一个基于j2me的飞行射击类游戏
2010-12-07 20:23 2066早期的代码,MVC思想 -
自己早期做的一个基于j2me的魔塔
2010-12-07 20:13 2072上面一个不完整,但代码好(MVC),但没抽出类; 下面一个比 ... -
j2me中的A*算法
2010-12-02 14:08 2023import javax.microedition.mid ... -
j2me代理连接返回码总是400的问题
2010-09-21 16:24 2734400是因为错误的语法导致服务器无法理解请求信息。 Con ... -
当显示内容过多时的滚屏类Container.java
2010-09-16 11:32 2136很多时候,由于手机屏幕太小,一下子显示不了那么多内容,这个时候 ... -
j2me读取中文的配置文件
2010-09-14 20:25 2135还可以参考这篇文章: http://gundumw100.it ... -
使用jsr172解析xml
2010-09-14 10:40 1933基类: import java.io.ByteArrayI ... -
面向对象的RMS操作
2010-09-14 10:29 1674将需要保存的数据集中起来形成一个model类,并且要实现序列化 ... -
使用KXML解析xml数据
2010-09-10 13:05 9287最近做项目,服务器传过来的都是Xml格式的数据,需要解析xml ... -
类似小球列表的选择控件(9宫格)
2010-08-27 15:50 1720import javax.microedition.lcd ... -
j2me工具类:TextUtil.java
2010-08-11 21:24 1640import java.util.Vector; i ... -
j2me工具类:Database.java
2010-08-11 21:18 1993/** * <p>Title: & ... -
j2me工具类:ReadFromFile.java
2010-08-11 21:15 4282import java.io.*; import jav ... -
j2me竖向滚动菜单的基本做法
2010-08-11 16:58 1989public class AppCanvas extend ... -
j2me工具类:声音播放类SoundUtil
2010-06-04 23:21 2107用法: 将需要播放的音乐都罗列在name,type数组中,需要 ... -
j2me工具类:PalettedImage调色板类
2010-06-04 22:57 1776该方法网上可以找到,我添加了一个重载函数: public Im ... -
地图编辑器Mappy下载
2010-05-25 22:30 3291简单的手机游戏地图编辑器,共享之。。。 eclipseme下 ... -
将Image对像转换为png格式的byte数组
2010-04-15 12:48 2589原理上说 1 获取Image 的ARGB数据 2将ARGB ...
相关推荐
可以根据设置不同难度生成9x9数独题
数独,算法,java,很简单实现数独的算法
数独的一种实现,实现了简单的数据算法,提供了界面
使用java,实现数独逻辑难题的实现,可以选择简单,一般,困难三个难度。
算法分析,源码都在里面。该文件是一篇被收录的论文。
用java实现的数独游戏,无论界面还是算法,都挺不错
第一部分:纯java实现的数独计算器,使用回溯法递归...第二部分:java数独出题器,运用回溯算法实现自定义出题,绝对的随机出题,可以自定义难度,所出题目有唯一解。后续将实现更多删减法出题,使得所出题型更加科学。
由于学生水平有限,所以只是实现了数独的功能,作为一个练习题并为考虑算法效率。
一个高手编译的数独游戏,功能强大。其中包括数种界面风格和功能,以及强大算法支持。
纯java实现的数独计算器,使用回溯法递归求解。同时实现了唯一候选值法、隐性唯一候选值法、区块删减法等最优求解法。
课程设计要求基于java编写程序完成数独游戏,能够随机生成九宫格的已知数,并通过算法检测所填数字是否满足数独条件。数独是锻炼脑筋的好方法,提高逻辑思维能力。 基于Java编写数独游戏,具体要求如下: 1、游戏的...
java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...
这是用 Dance Linking 做的一个数独的实现 速度很快
用java写的数独的算法程序,基本实现了,数独的计算
使用递归回溯实现数独求解器。 实现作为包含在包io.gitbub.thehappybug.Algorithms中的SudokuSolver类提供。 编译 可以使用make工具编译项目: $ make javac io/github/thehappybug/Algorithms/SudokuSolver.java ...
前言 数独是一种有趣的智力游戏,但是部分高难度数独在求解过程中经常出现大量单元格有多个候选数字可以填入,不得不尝试填写某个数字然后继续推导的方法。不幸的是这种方法经常...网上搜了一圈,大多都是Java、vb、
唯一解数独 生成算法 java
使用python和java实现数独游戏,有比较才有收获哦。 1、Python版 #--coding:utf-8-- import random import itertools from copy import deepcopy def make_board(m=3): numbers = list(range(1,m**2+1)) #可能...
实现数独的快速计算,简单高效! Java语言实现看似不可能的程序,无论是编程结构,还是算法都堪称经典。值得每个编程人员学习!!强烈推荐!!!
我知道应该有一种算法可以让您创建纯随机数独解决方案,但要做到这一点,需要使用回溯算法和其他几个我目前没有时间实现的更复杂的功能(我还有其他需要完成的作业)不幸的是我的时间)。 因此,我做了一些偷偷摸摸...