[算法]游戏'数读’的基本解法 JAVA版。
来源:互联网 发布:怎么复制淘宝店铺装修 编辑:程序博客网 时间:2024/06/08 13:56
昨天被我妹子虐了,做手机数读游戏。
想想毕业到现在这么多年没有写过算法类似的东西了,就写个事实。
首先先看最终版本 : http://www.dream-folio.com:8081/index.html
方框里填数字,计算结果,请不要乱虐,毕竟个把小时的作品,肯定bug很多。
本文记录为主,注释什么的没有。。。代码什么的不能看。
/* * @(#) A.java 2014-5-12 * * Copyright 2010 NetEase.com, Inc. All rights reserved. */package cn.zdfzboy.algorithm.test;import java.util.ArrayList;import java.util.Arrays;import java.util.HashSet;import java.util.List;/** * {1,9,6,0,0,0,0,0,0}, {0,0,0,0,0,8,3,0,0}, {0,0,2,1,9,0,0,0,0}, {0,2,0,0,8,0,0,0,7}, {0,0,5,2,0,1,8,0,0}, {7,0,0,0,6,0,0,3,0}, {0,0,0,0,1,6,4,0,0}, {0,0,7,4,0,0,0,0,0}, {0,0,0,0,0,0,9,8,5}, ---------------------- {7,0,8,0,0,0,3,0,0}, {0,0,0,2,0,1,0,0,0}, {5,0,0,0,0,0,0,0,0}, {0,4,0,0,0,0,0,2,6}, {3,0,0,0,8,0,0,0,0}, {0,0,0,1,0,0,0,9,3}, {0,9,0,6,0,0,0,0,4}, {0,0,0,0,7,0,5,0,0}, {0,0,0,0,0,0,0,0,0}, * @author JWW * */public class Readings { public boolean stop = false; public int[][] last; public static void main(String args[]){ int[][] m = { {3,0,0,9,0,0,0,0,0}, {0,1,0,0,2,0,0,5,0}, {0,0,0,0,0,8,0,0,6}, {8,0,0,7,0,0,3,0,0}, {0,3,0,0,5,0,0,1,0}, {0,0,7,0,0,6,0,0,2}, {6,0,0,0,0,0,8,0,0}, {0,2,0,0,1,0,0,0,0}, {0,0,0,0,0,9,0,0,0}, }; Readings r = new Readings(); r.getTab(m, 6); r.earth(m); r.print(r.last); } public boolean check(int[][] m,int value,int i,int j){ for(int k=0;k<9;k++){ if(m[i][k] == value || m[k][j] == value) return false; } return true; } public void earth(int[][] m){ if(stop){ return; } List<PossibleNumber> pn = getPossibleNumber(m); if(pn.size() == 0 ){ last = m; stop = true; return; } boolean tag = false; for(PossibleNumber p : pn){ if(p.size == 0) { return; } if(p.size == 1){ tag = true; if(check(m,p.possible[0],p.i,p.j)){ m[p.i][p.j] = p.possible[0]; }else{ return; } } } if(tag){ earth(m); return; } for(PossibleNumber p : pn){ if(p.size == 2){ int[][] c1 = clone(m); c1[p.i][p.j] = p.possible[0]; int[][] c2 = clone(m); c2[p.i][p.j] = p.possible[1]; earth(c1); earth(c2); return; } } System.out.println("=-"); } public int[][] clone(int[][] m){ int[][] copy=new int[m.length][]; for(int i=0;i<m.length;i++){ copy[i]=Arrays.copyOf(m[i], m[i].length); } return copy; } public List<PossibleNumber> getPossibleNumber(int[][] m){ Integer[] empty = {}; List<PossibleNumber> l = new ArrayList<PossibleNumber>(); for(int i=0;i<m.length;i++){ for(int j=0;j<m[i].length;j++){ if(m[i][j] == 0){ PossibleNumber p = new PossibleNumber(); p.i = i; p.j = j; HashSet<Integer> h = init(); for(int z : getTab(m,((i/3)*3)+j/3)){ if(z == 0) continue; h.remove(z); } for(int k=0;k<9;k++){ if(m[i][k] != 0) h.remove(m[i][k]); if(m[k][j] != 0) h.remove(m[k][j]); } p.possible = h.toArray(empty); p.size = h.size(); l.add(p); } } } return l; } public int[] getTab(int[][] mia,int k){ int[] ss = new int[9]; int ii =0; for(int i=(k/3)*3;i<(k/3)*3 + 3;i++){ for(int j=(k%3)*3;j<(k%3)*3 + 3;j++){ ss[ii] = mia[i][j]; ii++; } } return ss; } public HashSet<Integer> init(){ HashSet<Integer> h = new HashSet<Integer>(); for(int i = 1;i <= 9;i++){ h.add(i); } return h; } public void print(int[][] m){ for(int i=0;i<m.length;i++){ for(int j=0;j<m[i].length;j++){ System.out.print(m[i][j] + " "); } System.out.println(" "); } }}
0 0
- [算法]游戏'数读’的基本解法 JAVA版。
- 算法实践:数独的基本解法
- 算法实践——数独的基本解法
- 数独的Java版解法
- 数独游戏的AI解法
- 数独游戏的简单回溯解法
- 【算法分析】简单数独的解法
- java “数石子”游戏算法
- 数独游戏的深度优先遍历解法
- 基本矩阵的基本解法之8点算法
- 小朋友数数字的游戏 java实现算法
- 数独游戏java版(一)--核心算法
- 使用基本的算法,实现数独游戏的填值
- 一道微软算法题的java解法
- 一道微软算法题的java解法
- 数读游戏的不完全解法----采用位异或的方式记录每一格数字的可能性
- 算法游戏-黑洞数(java实现)
- “数独”游戏-Java-dfs搜索算法
- Java Concurrency 周期性任务调度
- 题目1029:魔咒词典
- NoSuchMethodException
- 使用重复键插入到bst树中
- string::npos
- [算法]游戏'数读’的基本解法 JAVA版。
- 关于Netty Pipeline中Handler的执行顺序问题
- Find Out How Many File Descriptors Are Being Used
- 2014最受欢迎的8款免费PSD线框图工具
- 快速USB学习
- 就是从房价开始的开发时间了咖啡吉欧斯偶然防水外壳
- Java设计模式---中介者模式
- js 调用百度地图api,并在地图上进行打点,添加标注
- android图标的一些知识