一、项目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) {}}

七、个人总结

数独——个人项目(项目地址)相关推荐

  1. springBoot 搭建web项目(前后端分离,附项目源代码地址)

    2019独角兽企业重金招聘Python工程师标准>>> 概述 该项目包含springBoot-example-ui 和 springBoot-example,分别为前端与后端,前后端 ...

  2. 修改本地项目svn地址

    修改本地项目svn地址 服务器上项目的svn地址变动,怎么修改本地代码svn地址,如图:

  3. cocos2dx以前的一些文章的项目下载地址

    cocos2dx以前的一些文章的项目下载地址 坦克大战下载地址:http://download.csdn.net/download/kuloveyouwei/7158131 微信打飞机下载地址:htt ...

  4. Android常用酷炫控件(开源项目)github地址汇总

    转载一个很牛逼的控件收集帖... 第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.Gri ...

  5. 光大证券“中文云”项目开源地址

    光大"中文云"项目开源地址 为带动国内金融文本研究,光大中文云系统现已开源.7人专业团队, 6年专注研究,2万行代码,爬虫.索引.检索.统计.热度.选股一气呵成.共享地址: htt ...

  6. 数独GUI程序项目实现

    数独GUI程序项目实现 导语:最近玩上了数独这个游戏,但是找到的几个PC端数独游戏都有点老了...我就想自己做一个数独小游戏,也是一个不错的选择. 前期我在网上简单地查看了一些数独游戏的界面,代码.好 ...

  7. 医药领域知识图谱快速及医药问答项目--项目探究

    开篇 文章根据@liuhuanyong_iscas大佬的项目进行调试与解析,作为KGQA和NLP入门的一个学习实战的项目.有不对的地方请不吝指教,若有侵犯相关权益,也请给我留言,我会撤下该文章. 项目 ...

  8. 基于SSM的商城项目项目源码+实验报告

    基于SSM的商城项目 本项目是今年暑假小学期时完成的,耗时四天时间,在小学期结束项目答辩时,在年级里斩获冠军,在此很感谢我的团队,正是我们各个环节的配合,最终才能够获得如此好的成绩. 目录 基于SSM ...

  9. C++文件服务器项目—项目总结与反向代理—7

    C++文件服务器项目-项目总结与反向代理-7 1. 项目总结 2. 项目提炼 3. web服务器的反向代理 4. 存储节点的反向代理   组件介绍基本写完了,后续进行深入.   本专栏知识点是通过零声 ...

  10. Springboot毕设项目项目管理系统01k92java+VUE+Mybatis+Maven+Mysql+sprnig)

    Springboot毕设项目项目管理系统01k92java+VUE+Mybatis+Maven+Mysql+sprnig) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql ...

最新文章

  1. iptables实现字符串匹配
  2. linux sudo命令详解
  3. 【OpenPose-Windows】运行OpenposeDemo.exe 如何保存图像运行结果及关节点信息
  4. C语言实现单例模式,以及使用内存屏障的性能优化方案
  5. R语言︱基本函数、统计量、常用操作函数
  6. Machine Learning Algorithms Study Notes--Supervised Learning
  7. 谷歌设置支持webgl
  8. AR公共安全及应急指挥中的应用 | TVP思享
  9. mysql返回上一层_mysql常用命令大全
  10. 一文曝光字节跳动薪资职级,资深开发的收入你意想不到~
  11. 波段高低点指标公式 k线高低点 大盘主图公式源码
  12. PHP Startup: Unable to load dynamic library -找不到指定模块解决方法
  13. 美颜SDK如何接入到硬件设备实现美颜拍摄?
  14. Linux无法终止进程,如何在Linux中终止进程
  15. 一个生日微信小程序 生日动画_生日当天发朋友圈的文案 生日快乐微信小句子...
  16. rip neighbor_借助众筹平台Neighbor.ly透明地提高公民素质
  17. 机器学习中的概率模型
  18. Python进行数据分析探索
  19. 国内首个基于 Rust 语言的 RPC 框架 — Volo 正式开源!
  20. 亚马逊云科技携手派拓网络再掀云端安全新风向

热门文章

  1. 解决pyinstaller打包后的exe文件打开闪退的问题
  2. 朱丹为什么是文艺青年
  3. 论.idea文件夹是干嘛的
  4. 架构师接龙:盛大许式伟 VS 金山张宴
  5. 深圳市云海麒麟计算机系统,有容乃大 云海麒麟川大建平台解决方案
  6. js调用vlc_在网页中调用VLC插件
  7. STM32F0系列内部高速时钟的配置方法
  8. php stristr,PHP中strpos、strstr和stripos、stristr函数分析
  9. Graph Heterogeneous Multi-Relational Recommendation (AAAI 2021)
  10. 0706他人笑我太疯颠