软件工程-个人项目(一) 数独终局的一些想法

  任务:实现一个能过生成数独终局并且能求解数独问题的控制台程序。

  代码地址:https://github.com/MrFasl/1120172188

  使用语言:C++

  每个数独终局包含9*9个数字,第一个字母为(8+8)%9+1 = 8,即每个数独终局第一个数字均为8

  关于数独终局数量的考虑:

    数量要求为1<=N<=1000000 = 1e6  在首个数字固定的情况下,第一行可用的组合有8!= 40320种 <1e6。

     现在考虑如何扩充数量,由于第一行不能改变,所以考虑456行和789行的行内交换,每个三行全排列个数为3! = 6种  则每个终局由后六行的排序而增加的数量为  6*6种,于是总的组合由6*6*8!>1e6种。数独终局数量问题解决。

  现在考虑如何实现整体代码:

  目前考虑主函数中三个函数  一个是模板生成函数,生成第一排的排列,第二个是数独生成函数,根据第一排的结果生成数独,第三个是问题生成函数,根据输入的数独生成数独终局问题,第四个是解决函数,解决数独问题 。

  

原文地址:https://www.cnblogs.com/fasl/p/12103390.html

时间: 2024-10-10 04:54:03

软件工程-个人项目(一) 数独终局的一些想法的相关文章

#2018BIT软件工程基础#个人项目:数独

一.开发时间 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划     · Estimate · 估计这个任务需要多少时间 5 6 Development 开发     · Analysis · 需求分析 (包括学习新技术) 420 840 · Design Spec · 生成设计文档 120 180 · Design Review · 设计复审 (和同事审核设计文档) 10 20 · Coding Sta

2017BUAA软工个人项目之数独

1.项目GitHub地址:https://github.com/ZiJiaW/Soduko (由于一开始把sudoku看成了soduko,于是名字建错了,读起来可能有点奇怪-) 2.项目PSP表格如下: PSP2.1 Personal Software Process Stages 预估耗时 实际耗时 Planning 计划 0.5h 0.5h .Estimate .估计这个任务需要多少时间 0.5h 0.5h Development 开发 20.5h 21.5 .Analysis .需求分析(

生成数独终局

本次个人项目是要求生成1e6个数独终局. 首先说说数独的规则,数独的棋盘是一个9×9的格图,每3×3又是一个9宫格. 数独的要求是每行.每列.每个9宫格中,1~9这9个数字必须出现且仅出现一次. 对于每一个数独终局,我们只需把所有的一换成而或者其他的数字,就会生成一个新的数独终局,那么就有了9!种,但是要求中左上角的数字是不能动的,所以一个全新的数独"种子"通过8的全排列之后就能产生8!个数独终局,所以我们只需找到25个"种子"再通过数字变换即可得到1e6个数独终局

软件工程—个人项目(四)最终总结

项目地址:https://github.com/MrFasl/1120172188 PSP表格 PSP2.1 Personal Software Process Stages 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 300   Estimate 估计这个任务需要多少时间 4000   Development 开发 1200   Analysis 需求分析(学习新技术) 700   DesignSpec 生成设计文档 200   DesignReview 设计复审 60  

关于软件工程第一次项目的一些感想

在奋斗了24+小时之后,终于完成了软件工程第一次项目.中间有很多曲折,也收获了很多经验. 预计完成时间:复习C++(一小时):构思(半小时):编码(四小时):调试(二小时):其他(半小时).合计(八小时). 实际完成时间:复习C++(两小时):构思(半小时):编码(三小时):调试(五小时+):优化(三小时).合计(十三小时+). 首先是审题方面. 这个要求里面最需要注意的有三点: 1.单词的构成,前三个必须是字母,后面可以接任意多的字母或数字,其他字符均视为分隔符. 2.忽略大小写 3.123f

对于软件工程整个项目的自我感受

软件工程是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学科.整个软件开发过程分为问题定义->可行性研究->需求分析->概要设计->详细设计->编码->测试->运行维护计算机软件等步骤(摘自百度知道). 软件工程的学习,是一块大项目,具体通过项目的制作实现,通过项目学习该门课程也是老师给我们的任务. 就目前的学习情况来看,软件工程在项目开发前的准备,开发时的设计和开发后的维护,都是一套需要一起考虑到的,所以,软件工程不单单是一个软件制作,更是软件设计

【目标】我的软件工程实践项目

1.这次的软件工程实践项目是要我们开发移动应用的软件,而我本人对于Android较感兴趣,所以对到最后能学习到的能力的预期当然是: · 有能力独自开发能稳定运行功能简单的应用,比如教务处查成绩软件等: · 懂得如何团队协作,想要开发功能稳定,强大的软件,单干肯定不行,所以要积累团队协作的经验: · 当然,如果有能力,能顺便了解下IOS或微信的开发自然最好. 2.而对课程的期望:希望老师能先给我们规划好大概的学习方向,让我们知道从哪开始入手学习,学习哪个方向的知识,不至于走太多歪路.当然,学习过程

现代软件工程团队项目贝塔阶段_开发日志_2018.01.15-2018.01.19

现代软件工程团队项目贝塔阶段_开发日志_2018.01.15-2018.01.19 2018.01.15 已完成: 1.版本上线 1.1上线操作步骤 1.1.1将网站整体文件夹拷贝到keqi1 1.1.2修改microDefinition.php的数据库名和根目录名 1.1.3修改注册界面发送验证码后直接填充功能 1.1.4修改del的主id的class为hide 1.1.5重新运行根目录的111.php(消除红点,也就是消除服务器返回的多余字符) 1.2修复上线过程中遇到的bug  1.2.1

软件工程基础个人个人项目 数独终局声称与解数独问题的控制台程序

Github项目 时间预估: 需求分析: 模块划分: 功能建模 : 解题思路: 设计实现: 性能优化: 代码说明: 实际时间花费: 原文地址:https://www.cnblogs.com/YZqiangBlog/p/12039031.html