- 1、本文档共1页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
课程设计心得体会
课程设计已经结束,怀着通过这次课程设计积累的信心与斗志,写下心得体会,为自己的奋斗留下痕迹,聊以缅怀。
刚开始拿到课程设计的任务书时,看到是“单循环赛选手胜负序列求解问题”,题目只给了短短的几行内容:“有n个选手P1,P2,P3,…,Pn参加了的单循环赛,每对选手之间非胜即负。现要求求出一个选手序列P1',P2',P3',…,Pn',使其满足Pi'胜Pi+1'(i=1,…,n-1)”。我的理解就是每个选手各遭遇一次,获胜得1分,失败不得分。比赛结束时按照各选手之间的积分排名求解他们的胜负序列。
后来经过老师的指导,又有了另外一种理解,即可以根据比赛过程中各选手之间的胜负关系产生胜负序列,不过这种方法产生的胜负序列可能不是唯一的,但是实际情况是比赛结束时一定会产生一种胜负序列。为此需要用合适的数据结构进行存储,来确定如何产生胜负序列,选取哪位选手作为第一名,假如该选手已经在序列中,在后面的筛选过程中,如何将该选手排除等一系列问题。
有了思路后,就开始着手去设计算法,第一种情况采用的数据结构是类,将选手的编号、积分以及胜负过程中的积分处理等封装在类中。其中,以编号和积分作为私有成员,而设置编号、获胜处理、失败处理、获取积分、获取编号等作为公有成员。此时将该问题转化为对选手积分进行排序的问题。第二种情况采用的数据结构是有向图,将每个选手作为有向图的一个顶点,选手间的胜负关系作为有向弧,从箭头出发的一方作为获胜者,所以该问题转化为了有向图的深度遍历问题,即求解一条包含所有顶点的简单路径。在深度遍历过程中,以有向图的邻接矩阵作为存储结构。
在本实验中,为了使功能更完善,还用到了磁盘文件。可以将参赛选手的人数、他们之间的胜负关系预先放进一个记事本中,运行程序时被读入,在处理后将胜负序列读出到另一个记事本中,并保存起来。这里会用到输入、输出文件流的成员函数。
不过,在调试过程中出现了一些问题:
①第一种情况时,以选手姓名作为私有成员时,由于权限问题,私有成员不能直接被调用,而主调函数中要求输入姓名,编译时一直出错。为了解决这个问题,另外定义了一个结构体,只放了选手姓名name,这样就可以使用了。在程序中只需要注意让选手姓名与积分对应起来就行了。同时,所得的胜负序列会读出到名为“比赛积分.txt”的文本文件中。
②在试探的路径中出现了编号的重复,也就是说有些点在试探成功后又被试探了,这显然是错误的,分析可知,这是由于在对结点的试探成功后并没有修改相应的标志数组中的相应位置,即让visited[i]=1,导致了重复试探。在入栈函数Push()中加入了入栈功能,此问题得以解决。同理在测试失败时也应该修改相应的标志位置。
=3\*GB3③在从文件中读入参赛人数及胜负关系时,在记事本中格式为“4wffwfw”,第一次读入人数,在第二次读胜负关系时,“4”被重新读了一遍。为解决这个问题,老师指导时提及了fseek函数,但是从网上查到它只能在C语言中使用。因此,建立了两个记事本“Text1.txt”、“Text2.txt”,分别存放参赛人数和胜负关系,这样就不会出现问题了。
临渊羡鱼,不如归而结网。这次课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在你的勇气和毅力下是抬不了头的。从做这个课程设计开始无论遇到什么困难,我都没有一丝的放弃的念头。出于对知识的渴望,出于对新技术的好奇,出于对一切未知的求知,我完成了这次单循环赛课程设计,不过这只是我学习路上的驿站,我会继续学习,古语有云:学无止境!
文档评论(0)