数据结构实验报告--熊猫烧香
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》课程设计报告书
姓名:
辅导老师:
班级:
学号:
日期:
一、课程设计题目:
熊猫烧香(浙大)
二、课程设计内容:
1、设计要求:
模拟一个实验室的机器网络(M行N列的矩阵)被病毒感染的过程,每台机器只和它相邻的机器直接相连。开始时有T太机器被感染,每台遭遇的熊猫变种
类型都不同,分别记为Type1,Type2,……TypeT。每台机器都具有一定级别的防
御能力,记为L(0 2、病毒的传播规则: (1)病毒只能从一台被感染的机器传到另一台没有被感染的机器。 (2)如果一台机器已经被某个变种的病毒感染过,就不能再被其他变种感染。 (3)病毒的传播能力每天都在增强。以D代表病毒的攻击等级,初始值为1,每 天增加1,可以感染所有可以到达的防御级别小于病毒自身攻击级别的机器。当L 大于D的时候可以组织病毒从自己处继续传播。 (4)同一天内,由1号变种病毒先开始传播,感染所有它可能感染的机器,然后 Type2、Type3……依次经行传播。 3、程序的要求: (1)输入要求: 输入由若干组测试数据组成。 每组数据的第一行包含2个整数M和N(1= 的矩阵表示网络的初始感染状态,其中的正、负整数的意义如题目描述中所定义。 下面一行给出一个正整数Q,是将要查询的变种的个数。接下去的Q行里,每行 给出一个变种的类型。 当M或N为0时,表示全部测试结束,不要对该数据做任何处理。 (2)输出要求: 对每一组进行测试,在一行里输出被某个特定变种所感染的机器的数量。 (3)输入输出例子: 输入: 3 4 1 -3 - 2 -3 -2 -1 -2 2 -3 -2 -1 -1 2 1 2 0 0 输出: 9 3 三、算法设计: 确定所需要的模块及模块之间的关系: 四、程序正确性验证 (指边界测试数据,即程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足要求的结果): 由以上测试结果分析可知:程序正确的完成了题目要求的基本操作,并且添加了每天病毒传播的状态显示,而且背景和字体分别设置了颜色变化,使单调的黑屏界面变成彩色界面,交互性好。 五、课程设计过程中出现的主要问题、原因及解决方法: 1、开始定义结构体时,节点的几个域定义划分不明确,随着后续程序的需要逐渐明确清晰。 2、编写病毒传播程序代码时初定使用广度优先遍历算法,但具体实现起来参数传递不好处理,就改为直接查找到病毒源后向四个方向分别判断传播,实现起来更加简单便捷。 3、为了看清病毒传播的每天的变化,在传播函数里添加了输出每天状态的代码。 4、为了多次测试方便,在main()函数里加上了循环语句,实现一次运行多次测试。 六、课程设计的主要收获: 通过这次课程设计我也着实又感受了一次编程的乐趣,从中也学到了不少知识。虽然都说“程序=数据结构+算法”,但我在学习运用数据结构编程之前,并没能深刻体会到这一点,直到这次课程设计。 我感受最深的一点是:以前用C++编程,只是注重如何编写函数能够完成所需要的功能,似乎没有明确的战术,只是凭单纯的意识和简单的语句来堆砌出一段程序。感觉有点像张飞打仗,有勇无谋,只要能完成任务就行。但现在编程感觉完全不同了。在编写一个程序之前,自己能够综合考虑各种因素,首先选取自己需要的数据结构,是树还是图或是别的什么?然后选定一种或几种存储结构来具体的决定后面的函数的主要风格。最后在编写每一个函数之前,可以仔细斟酌比对,挑选出最适合当前状况的算法。这样,即使在完整的程序还没有写出来之前,自己心中已经有了明确的原图了。这样无形中就提高了自己编写的程序的质量。 另外,我还体会到深刻理解数据结构的重要性。只有真正理解这样定义数据类型的好处,才能用好这样一种数据结构。了解典型数据结构的性质是非常有用的,它往往是编写程序的关键。 我以前对算法一直有些害怕,总是看不明白究竟一些算法是怎么进行的。在这次实验中我终于克服了这一障碍,一次次单步执行书中函数的例子,并一遍遍在心中自己默默的走,终于弄明白了,真的是功夫不负有心人啊!同时我还根据自己的理解写出了类似的函数实现了新的功能,真是受益良多啊! 在这次实验中,我对参数的调用也进行了很多种尝试,已经能够相对准确的选择合适的参数形式来实现函数之间的数据传输交互了。 总之,我会继续我的兴趣编写程序的,相信在越来越多的尝试之后,自己会不断进步不断提高的七、对今后课程设计的建议: 课程设计能使学生充分体验到数据结构在编程方面的重要性,锻炼自己动手能力,个人建议今后课程设计题目设计涉及方面更加广泛,实验时也允许多人组队,培养学生的团队精神,总之通过课程设计会使大家学习到很多新东西,对编程有更深的体会。感谢老师的辛苦工作,身体健康,工作顺利。 源代码: #include using namespace std; #define MAXNODE 500 typedef struct VertexType //结点信息 { int day; //第几天被感染的 int dl; //防御级别 int r,c; //行列号 int vt; //病毒类型 }VertexType; typedef struct MGraph //邻接矩阵 { VertexType m[MAXNODE][MAXNODE]; //结点数int row,cloum,vtnum; //行列数、感染的数目 }MGraph; MGraph mg; //定义图 typedef struct Queue //队列