大作业合集¶
以下是一些大作业合集,不提供具体的代码,只提供思路和结果供参考。
大一上¶
计程设¶
数独大作业
会用到C和Java。重点在于数独的生成和求解用到的技术都是深度搜索,或者所谓的回溯。
具体要求如下:
功能要求¶
数独程序由 C 计算程序和 Java 界面程序两个部分构成。 1.C 计算程序必须具备以下功能:
- 能够读入 9 阶数独题目(txt 文件),并把数据存储在二维数组中
- 求解 9 阶数独,有解时输出结果和耗时,无解时则输出数独无解
有解时返回求解耗时(以 ms 为单位),无解时返回-1;
- 能够生成不同难度的数独,生成的数独需有解(可以不唯一)
其中 level 为关卡(控制难度的参数),level 值越大,数独的求解难度越大。二维数组 a 和 ans 分别存储数独题目和答案
实现思路¶
数独求解和生成¶
不追求求解速度的话可以采用回溯法,难度较低的数独求解基本在几个毫秒,而难度较高(空格多)则求解时间很长(>1s).如果追求更高得分则可以采用其他办法 详见:状态压缩
我最终的得分是9.1/10, 对我而言也算是一个不错的成绩,因此大家不用太担心方法选择,这不会对你的得分有什么太大的影响。
Java swing¶
Java swing已经被淘汰了,我揣测让大家使用这个是为了后面小学期使用QT做准备。swing的操作方法也比较简单,和大家遇到的前端代码基本没有区别,这里提供一个轮子供大家参考: Java数独
C的代码框架¶
这里给出我自己写的框架,供大家参考:
C计算程序的设计与实现
函数设计 介绍设计了哪些功能模块(函数),各函数的功能¶
设计了
其中Solve函数包含:Solve和judge 两个函数。
- genSudoku: 生成数独。
- Solve: 递归解数独
- Judge:行列及宫格判断是否合法。
- 
Load: 加载数独。
- 
数独求解算法 介绍求解数独的算法及关键步骤 
- 
算法:递归(或者深度搜索)。参数为:待求数独,临时数组,数独格子标号num(1-80)。 
- 
步骤:分以下几种情况: - 行数和列数==8;此时数独已经解完,跳出。
- 不为8时,num++;进行下一个格子的试探
- 判断待求数独中元素是否为0,进行赋值。
 
- 
生成数独算法 介绍生成不同难度数独的算法及关键步骤 - 算法1:随机数生成数独残局,再solve出来,挖空;
- 算法2:对数独模板进行行列变换(交换数字的位置,生成新的数独面板,但这种方法具有规律性,虽然生成效率高,但是不适合作为题目),再挖空; 挖空数=难度*3+5;
 
Java 界面程序的设计与实现
各个类的设计 每个类的功能,具有哪些属性、成员函数¶
- 
主类: SB和SudokuFinal- 
SB负责生成数独,与C交互,成员函数为 native函数(将数组传入C,处理后再传回),getAnswer方法(获得数独答案),getGame方法(获得数独题目),
- 
SudokuFinal负责生成界面与事件响应。成员函数为 重新开始游戏: newGame获取时间: gettime清空背景色: clearcolor检查填入数字与预置数字是否相同并赋予背景色: samenumber检查错误填入数字并给予提示: checkwrongnum
 
- 
副类¶
分别负责焦点响应,软键盘响应,清除数字响应和各类按钮响应。 成员函数(构造函数):
对格子填数,软键盘事件响应
处理格子聚焦和失去焦点,格子聚焦改变背景颜色。
分情况(if语句判断)处理按钮事件。
清除数字。
界面设计 用了什么布局和哪些控件¶
- 布局:GridLayout和BorderLayout。
- 控件: JPanel, JFrame, JButton, JTextField,JDialog
界面事件处理 处理了哪个类型的事件,如何处理¶
主要是按钮单击的响应和文本框获取焦点的响应,通过上述几个副类处理的。
   A.按钮单击:接口为ActionListener, 不同按钮对应不同功能。
   B.文本框:单击获取焦点,并改变文本框的背景颜色(强调)。
   C . 对话框:主要用于完成游戏和错误的提示。
以上是解释代码的文档,在实现功能的过程中,可以先尝试利用回溯法解决数独生成和求解,再去用java-swing绘制最后的GUI,最后调用老师给的C和java的接口。
需要注意的是,这个接口传输比较慢,推荐直接使用java写完整个代码(即数独求解+生成+GUI),验证功能。最后再写C和java交互。