跳转至

大作业合集

以下是一些大作业合集,不提供具体的代码,只提供思路和结果供参考。

大一上

计程设

数独大作业

会用到C和Java。重点在于数独的生成和求解用到的技术都是深度搜索,或者所谓的回溯。

具体要求如下:

功能要求

数独程序由 C 计算程序和 Java 界面程序两个部分构成。 1.C 计算程序必须具备以下功能:

  1. 能够读入 9 阶数独题目(txt 文件),并把数据存储在二维数组中
int loadSudoku ( char filename[ ], int a[9][9])
  1. 求解 9 阶数独,有解时输出结果和耗时,无解时则输出数独无解
int solveSudoku (int a[9][9])

有解时返回求解耗时(以 ms 为单位),无解时返回-1;

  1. 能够生成不同难度的数独,生成的数独需有解(可以不唯一)
int genSudoku (int level,int a[9][9],int ans[9][9] )

其中 level 为关卡(控制难度的参数),level 值越大,数独的求解难度越大。二维数组 a 和 ans 分别存储数独题目和答案

实现思路

数独求解和生成

不追求求解速度的话可以采用回溯法,难度较低的数独求解基本在几个毫秒,而难度较高(空格多)则求解时间很长(>1s).如果追求更高得分则可以采用其他办法 详见:状态压缩

我最终的得分是9.1/10, 对我而言也算是一个不错的成绩,因此大家不用太担心方法选择,这不会对你的得分有什么太大的影响。

Java swing

Java swing已经被淘汰了,我揣测让大家使用这个是为了后面小学期使用QT做准备。swing的操作方法也比较简单,和大家遇到的前端代码基本没有区别,这里提供一个轮子供大家参考: Java数独

C的代码框架

这里给出我自己写的框架,供大家参考:

C计算程序的设计与实现

函数设计 介绍设计了哪些功能模块(函数),各函数的功能

设计了

genSudoku, Solve, loadSudoku

其中Solve函数包含:Solvejudge 两个函数。

  1. genSudoku: 生成数独。
  2. Solve: 递归解数独
  3. Judge:行列及宫格判断是否合法。
  4. Load: 加载数独。

  5. 数独求解算法 介绍求解数独的算法及关键步骤

  6. 算法:递归(或者深度搜索)。参数为:待求数独,临时数组,数独格子标号num(1-80)。

  7. 步骤:分以下几种情况:

    1. 行数和列数==8;此时数独已经解完,跳出。
    2. 不为8时,num++;进行下一个格子的试探
    3. 判断待求数独中元素是否为0,进行赋值。
  8. 生成数独算法 介绍生成不同难度数独的算法及关键步骤

    1. 算法1:随机数生成数独残局,再solve出来,挖空;
    2. 算法2:对数独模板进行行列变换(交换数字的位置,生成新的数独面板,但这种方法具有规律性,虽然生成效率高,但是不适合作为题目),再挖空; 挖空数=难度*3+5;

Java 界面程序的设计与实现

各个类的设计 每个类的功能,具有哪些属性、成员函数
  1. 主类:SBSudokuFinal

    1. SB负责生成数独,与C交互,成员函数为native函数(将数组传入C,处理后再传回),getAnswer方法(获得数独答案),getGame方法(获得数独题目),

    2. SudokuFinal负责生成界面与事件响应。

      成员函数为

      重新开始游戏: newGame

      获取时间: gettime

      清空背景色: clearcolor

      检查填入数字与预置数字是否相同并赋予背景色: samenumber

      检查错误填入数字并给予提示: checkwrongnum

副类
FocusHandler
PutNumberActionListener
ClearNumberActionListener
OperationListener

分别负责焦点响应,软键盘响应,清除数字响应和各类按钮响应。 成员函数(构造函数):

PutNumberActionListener implements ActionListener,

对格子填数,软键盘事件响应

FocusHandler implements FocusListener

处理格子聚焦和失去焦点,格子聚焦改变背景颜色。

OperationListener implements ActionListener

分情况(if语句判断)处理按钮事件。

ClearNumberActionListener implements ActionListener

清除数字。

界面设计 用了什么布局和哪些控件
  1. 布局:GridLayoutBorderLayout
  2. 控件: JPanel, JFrame, JButton, JTextField,JDialog
界面事件处理 处理了哪个类型的事件,如何处理

主要是按钮单击的响应和文本框获取焦点的响应,通过上述几个副类处理的。 A.按钮单击:接口为ActionListener, 不同按钮对应不同功能。 B.文本框:单击获取焦点,并改变文本框的背景颜色(强调)。 C . 对话框:主要用于完成游戏和错误的提示。

以上是解释代码的文档,在实现功能的过程中,可以先尝试利用回溯法解决数独生成和求解,再去用java-swing绘制最后的GUI,最后调用老师给的C和java的接口。

需要注意的是,这个接口传输比较慢,推荐直接使用java写完整个代码(即数独求解+生成+GUI),验证功能。最后再写C和java交互。