数独——个人项目(项目地址)
一、项目GitHub地址:https://github.com/lc1997622/SudokuProject
二、PSP表格记录:
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 200 | 120 |
·Estimate | ·估计这个任务需要多长时间 | 10 | 20 |
Development | 开发 | ||
·Analysis | ·需求分析(包括学习新技术) | 60 | 120 |
·Design Spec | ·生成设计文档 | 200 | 120 |
·Design Review | ·设计复审(和同事审核设计文档) | / | / |
·Coding Standard | ·代码规范(为目前的开发制定合适的规范) | 120 | 180 |
·Design | ·具体设计 | 120 | 180 |
·Coding | ·具体编码 | 1080 | 1200 |
·Code Review | ·代码复审 | 200 | 60 |
·Test | ·测试(自我测试,修改代码,提交修改) | 200 | 660 |
Reporting | 报告 | ||
·Test Report | ·测试报告 | 60 | 60 |
·Size Measurement | ·计算工作量 | 30 | 30 |
·Postmortem & Process Improvement Plan | ·事后总结,并提出过程改进计划 | 180 | 120 |
合计 | 2260 | 2750 |
三、解体思路:
1、老师限制了可以使用的语言,然后之前看过一点JAVA,就想挑战一下自己,用JAVA写。
2、首先复习了一下JAVA的语法,看在复习的过程中一是复习语法和基础,二是能不能找到一些解体思路。
3、有问题先找搜索引擎,然后去Google了一下,看到一些方法。因为有压力测试,所以算法依旧是核心,权衡之后,生成数独选择随机生成法,自己再优化一下。解数独用了暴力回溯法。
4、其实刚拿到个人项目的时候自己还挺虚的,一是用Java写,没有别人的路可借鉴,遇到什么情况也无法预测,要是写蹦了就更难受了,二是项目的要求是用VS写,我的电脑VS之前删过某个文件,导致不能用了,只能用IDEA。
5、对于性能分析,关键是IDEA能不能做,去Google了一下,有相应的软件和教程,可以实现。
四、实现过程
(吐槽一下,确实坎坷)
1、函数主体图
整个项目分为三个模块:输入输出模块,解数独模块,生成熟读终局模块。
2、代码组织
三个模块分别对应三个类:Sudo(主类)、SudokuPuzzleSolver(解数独)、SudoPuzzleGenerator(生成数独终局)
五、程序性能分析
六、代码说明
1、主类
public class Sudo {public static void main() {Options ops = new Options(); //参数设置if (输入为c) {try {/*** 建立输入输出类对象* 调用SudokuPuzzleGenerator生成数独*/
} catch () { } }if (输入为s) { try {/*** 建立输入输出类对象* 调用SudokuPuzzleSolver解数独*/
} catch () { } } }
2、生成数独终局
public class SudokuPuzzleGenerator { //生成数独终局public int[][] generatePuzzleMatrix() { 随机生成并返回return randomMatrix;}private int[] buildRandomArray() {}private boolean isCandidateNmbFound() {/*** 试着给randomMatrix[row][col] 赋值,并判断是否合理*/}private boolean noConflict() {return noConflictInRow(candidateMatrix, row, col)&& noConflictInColumn(candidateMatrix, row, col)&& noConflictInBlock(candidateMatrix, row, col);}private boolean noConflictInRow() {/*** 因为产生随机数矩阵是按照先行后列,从左到右产生的 ,该行当前列后面的所有列的值都还是0, 所以在行比较的时候,* 只要判断该行当前列与之前的列有无相同的数字即可。**/} private boolean noConflictInColumn() {/*** 与noConflictInRow(...)方法类似:** 因为产生随机数矩阵是按照先行后列,从左到右产生的,该列当前行后面的所有行的值都还是0,** 所以在列比较的时候, 只要判断该列当前行与之前的行有无相同的数字即可。**/}private boolean noConflictInBlock() {/*** 为了比较3 x 3 块里面的数是否合理, 需要确定是哪一个Block,我们先要求出3 x 3的起始点。 比如: Block 1* 的起始点是[0][0] Block 2 的起始点是[3]][0]** ... Block 9 的起始点是[6][6]*/}}
3、求解数独
public class SudokuPuzzleSolver {/*** 解数独,并打印结果*/public void solve() {}/*** 解数独*/private boolean solve() {}/*** 某一行放置数据是否有冲突*/private boolean isRowSafe(int[][] grids, int row, int value) {}/*** 某一列放置数据是否有冲突*/private boolean isColumnSafe() {}/*** 每个区域是 3 X 3 的子块,是否可以可以放置数据*/private boolean isSmallBoxSafe() {}/*** 在指定位置是否可以放置数据*/private boolean isSafe(int[][] grids, int row, int column, int value) {}}
七、个人总结
数独——个人项目(项目地址)相关推荐
- springBoot 搭建web项目(前后端分离,附项目源代码地址)
2019独角兽企业重金招聘Python工程师标准>>> 概述 该项目包含springBoot-example-ui 和 springBoot-example,分别为前端与后端,前后端 ...
- 修改本地项目svn地址
修改本地项目svn地址 服务器上项目的svn地址变动,怎么修改本地代码svn地址,如图:
- cocos2dx以前的一些文章的项目下载地址
cocos2dx以前的一些文章的项目下载地址 坦克大战下载地址:http://download.csdn.net/download/kuloveyouwei/7158131 微信打飞机下载地址:htt ...
- Android常用酷炫控件(开源项目)github地址汇总
转载一个很牛逼的控件收集帖... 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.Gri ...
- 光大证券“中文云”项目开源地址
光大"中文云"项目开源地址 为带动国内金融文本研究,光大中文云系统现已开源.7人专业团队, 6年专注研究,2万行代码,爬虫.索引.检索.统计.热度.选股一气呵成.共享地址: htt ...
- 数独GUI程序项目实现
数独GUI程序项目实现 导语:最近玩上了数独这个游戏,但是找到的几个PC端数独游戏都有点老了...我就想自己做一个数独小游戏,也是一个不错的选择. 前期我在网上简单地查看了一些数独游戏的界面,代码.好 ...
- 医药领域知识图谱快速及医药问答项目--项目探究
开篇 文章根据@liuhuanyong_iscas大佬的项目进行调试与解析,作为KGQA和NLP入门的一个学习实战的项目.有不对的地方请不吝指教,若有侵犯相关权益,也请给我留言,我会撤下该文章. 项目 ...
- 基于SSM的商城项目项目源码+实验报告
基于SSM的商城项目 本项目是今年暑假小学期时完成的,耗时四天时间,在小学期结束项目答辩时,在年级里斩获冠军,在此很感谢我的团队,正是我们各个环节的配合,最终才能够获得如此好的成绩. 目录 基于SSM ...
- C++文件服务器项目—项目总结与反向代理—7
C++文件服务器项目-项目总结与反向代理-7 1. 项目总结 2. 项目提炼 3. web服务器的反向代理 4. 存储节点的反向代理 组件介绍基本写完了,后续进行深入. 本专栏知识点是通过零声 ...
- Springboot毕设项目项目管理系统01k92java+VUE+Mybatis+Maven+Mysql+sprnig)
Springboot毕设项目项目管理系统01k92java+VUE+Mybatis+Maven+Mysql+sprnig) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql ...
最新文章
- iptables实现字符串匹配
- linux sudo命令详解
- 【OpenPose-Windows】运行OpenposeDemo.exe 如何保存图像运行结果及关节点信息
- C语言实现单例模式,以及使用内存屏障的性能优化方案
- R语言︱基本函数、统计量、常用操作函数
- Machine Learning Algorithms Study Notes--Supervised Learning
- 谷歌设置支持webgl
- AR公共安全及应急指挥中的应用 | TVP思享
- mysql返回上一层_mysql常用命令大全
- 一文曝光字节跳动薪资职级,资深开发的收入你意想不到~
- 波段高低点指标公式 k线高低点 大盘主图公式源码
- PHP Startup: Unable to load dynamic library -找不到指定模块解决方法
- 美颜SDK如何接入到硬件设备实现美颜拍摄?
- Linux无法终止进程,如何在Linux中终止进程
- 一个生日微信小程序 生日动画_生日当天发朋友圈的文案 生日快乐微信小句子...
- rip neighbor_借助众筹平台Neighbor.ly透明地提高公民素质
- 机器学习中的概率模型
- Python进行数据分析探索
- 国内首个基于 Rust 语言的 RPC 框架 — Volo 正式开源!
- 亚马逊云科技携手派拓网络再掀云端安全新风向