数独.java
来源:互联网 发布:我的世界天堂门js 编辑:程序博客网 时间:2024/05/22 16:41
package A类有价值的回顾的;import java.util.Scanner;//真的很难下手//有了一定的套路模型了public class 数独{ public static int[][] a = new int[9][9]; public static boolean fa(int h,int l,int i){//检查要求的区域是否有重复,这里不能简单的通过标记TRUE还是FALSE来完成 //检查同色的九宫格,看题目,少了一种筛选条件,导致大量的分支出现 int up = h%3; int left = l%3; for(int m=h-up;m<h-up+3;m++)//注意这种相对位置的求法 for(int n=l-left;n<l-left+3;n++){ if(a[m][n] == i) return false; } //检查行 for(int j=0;j<9;j++){ if(i == a[h][j]) return false; } //检查列 for(int j=0;j<9;j++){ if(i == a[j][l]) return false; } return true; } public static void f(int b){ //这里只需要传递一个b就可以表示几行几列,这不也就是状态压缩的思想吗 int h = b/9; int l = b%9; if(b == 81){ for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ System.out.print(a[i][j]); } System.out.println(); } System.out.println("============="); return; } if(a[h][l] == 0){ //选一个合适的数赋给他 for(int i=1;i<=9;i++){ //检查第h行第l列是否能输入i if(fa(h,l,i) == true){ a[h][l] = i; f(b+1); a[h][l] = 0; } } return; } else{//这里就是题目中已经输入的数,不等于0说明已经被填好了 f(b+1); return; } } public static void main(String[] args){ String[] ss = new String[9]; Scanner sc = new Scanner(System.in); for(int k=0;k<9;k++){ ss[k] = sc.nextLine(); } for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ a[i][j] = ss[i].charAt(j)-'0';//借助字符串进行输入,字符串的charAt()可以实现一位输入 } } f(0); }}/*你一定听说过“数独”游戏。如图,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。数独的答案都是唯一的,所以,多个解也称为无解。本图的数字据说是芬兰数学家花了3个月的时间设计出来的较难的题目。但对会使用计算机编程的你来说,恐怕易如反掌了。本题的要求就是输入数独题目,程序输出数独的唯一解。我们保证所有已知数据的格式都是合法的,并且题目有唯一的解。格式要求,输入9行,每行9个字符,0代表未知,其它数字为已知。输出9行,每行9个数字表示数独的解。例如:输入(即图中题目):005300000800000020070010500400005300010070006003200080060500009004000030000009700程序应该输出:145327698839654127672918543496185372218473956753296481367542819984761235521839764再例如,输入:800000000003600000070090200050007000000045700000100030001000068008500010090000400程序应该输出:812753649943682175675491283154237896369845721287169534521974368438526917796318452资源约定:峰值内存消耗(含虚拟机) < 256MCPU消耗 < 2000ms*/
阅读全文
0 0
- 数独.java
- 数独-java版
- 蓝桥杯 数独 java
- 数独java
- 数独.java
- 数独求解java
- 数独的java实现
- Java 数独游戏代码
- Java 实现完成数独
- [编程题]数独(JAVA)
- 数独解法Java实现
- 数独之Java实现
- java编写数独计算器
- [编程题]数独(JAVA)
- 用java实现的数独运算
- 数独算法的java实现
- java数独生成算法(递归)
- java实现数独的算法
- [Python]Windows下安装Graphviz和pygraphviz的方法
- apply,bind,call应用小总结
- [Unity]制作一个弹幕系统
- 内存对齐
- Ubuntu14.04 LTS更新源
- 数独.java
- if..else..if 对三个变量的作用
- Gson
- 从零开始搭建自己的VueJS2.0+ElementUI单页面网站(二、编写导航页)
- C++中volidate关键字
- C/C++的注释转换
- freemarker 速记
- java实现多重继承
- 四阶幻方.java