资源描述
算法与数据结构课程设计题目学生从下列题目中自主选择任意一个题目,集中在一周之内(共24学时),完成设计和调试任务。题目一: 图结构及其应用:熟悉图的各种存储结构(特别是邻接矩阵和邻接表)。设计一个交通咨询系统,用两种方法求得最短路径。此外建立一个AOE网,求得关键路径。题目二、 航班信息的查询与检索:综合利用排序和查找的方法进行设计,可以涉及到文件的一般概念。题目三、 实现图书管理信息系统的设计。这是一个数据结构的综合使用,涉及的知识比较全面,特别是对文件的使用更为全面。题目四:二叉搜索树:各种搜索树效率比较题目要求:本题目要求对普通的二叉搜索树、AVL树分别实现指定操作,并分析比较这二种不同数据结构对应的一系列插入和删除操作的效率。要求测试对N个不同整数进行下列操作的效率:l 按递增顺序插入N个整数,并按同样顺序删除;l 按递增顺序插入N个整数,并按相反顺序删除;l 按随机顺序插入N个整数,并按随机顺序删除;要求N从1000到10000取值,并以数据规模N为横轴,运行时间为纵轴,画出二种不同数据结构对应的操作效率比较图。题目五:并查集:检查网络题目要求:给定一个计算机网络及机器间的双向连线链表,每一条连线允许两端的计算机进行直接的文件传输,其他计算机若存在一条连线路径,也可以进行间接的文件传输。请设计算法和程序进行判断:任意指定两台计算机,它们之间是否可以进行文件传输?输入要求:输入由若干组测试数据组成。对于每一组测试,第1行包含一个整数N(10000),即网络中计算机的总台数,因而每台计算机可用1到N之间的一个正整数表示。接下来的几行输入格式为 I C1 C2或者C C1 C2或者S,其中C1和C2是两台计算机的序号,I表示在C1和C2间输入一条连线,C表示检查C1和C2间是否可以传输文件,S表示该组测试完毕。输出要求:对每一组C开头的测试,检查C1和C2间是否可以传输文件,若可以,则在一行中输出“yes”,否则输出“no”。当读到S时,检查整个网络。若网络中任意两台机器间都可以传输文件,则在一行中输出“The network in connected,”,否则输出“There are k components.”,其中k是网络中连通集的个数。两组测试数据之间请输出一空行分隔。题目六:网络流:宇宙旅行题目要求:在走遍了地球上的所有景点以后,旅游狂人开始计划他的宇宙旅行项目。经过谨慎调查,他目前掌握了一张各卫星空间站可以临时容纳的旅客人数的列表。当旅客从一个星球飞往另一个星球时,需要在若干卫星空间站临时停靠中转,而这些空间站不能接待任何旅客驻留,旅客必须立刻转乘另一艘飞船离开,所以空间站不能接待超过自己最大容量的旅客流。为了估计预算,现在旅游狂人需要知道终点星球的接待站应该设计多大容量,才能使得每艘飞船在到达时都可以保证让全部旅客下船。输入要求:输入由若干组测试数据组成。每组测试数据的第1行包含旅行的起点星球和终点星球的名称和一个不超过500的正整数N(N为0标志全部测试结束,不要对该数据做任何处理)。接下来的N行里,数据格式为:sourcei ,destinationi,capacityi,其中sourcei和destinationi是卫星空间站的名称或起点、终点星球的名称,正整数capacityi是飞船从sourcei到destinationi一次能运载的最大旅客流量。每个名称是由A-Z之间3个大写字母组成的字符串,例如ZJU。测试数据中不包含任何到达起点星球的信息以及任何从终点星球出发的信息。输出要求:对每一组测试,在一行里输出终点星球接待站应具有的最小容量,使得每艘飞船在到达时都可以保证让全部旅客下船。题目七:最小生成树:室内布线题目要求:装修新房子是一项颇为复杂的工程,现在需要写个程序帮助房主设计室内布线的布局。首先,墙壁上插座的位置是固定的。插座间需要有电线相连,而且要布置得整齐美观,即要求每条线都与至少一条墙边平行,且嵌入四壁或者地板(不能走屋顶)。房主要求知道,要将所有插座连通,自己需要买的电线的最短长度。另外,别忘了每个房间都有门,电线不可以穿门而过。下图给出了一个有4插座的房间的电线布局。输入要求:输入由若干组测试数据组成。每组数据的第1行包含房间的长、宽、高和插座的个数N(N为一个不超过20的正整数)。接下去的N行中,第i行给出第i个插座的位置坐标(xi,yi,zi); 最后一行包含4个3元组(x1,y1,z1) (x4,y4,z4),分别是长方形门框的4个角的三维坐标。4个数字全部为0表示全部测试结束,不要对该数据做任何处理。注意:这里假设长方体形状的房间完全位于三维直角坐标系的第一象限内,并且有一个角落在原点上。地板位于x-y平面。题目数据保证,每个插座仅属于四面墙中的一面,门上没有插座。要求每段电线的两端必须仅与插座连接,电线之间不能互相交叉焊接。输出要求:对每一组测试,在一行里输出要将所有插座连通需要买的电线的最短整数长度。题目八:分治法:最小套圈设计题目要求:套圈游戏是游乐场中常见的游戏之一,其规则为:游戏者将手中的圆环套圈投向场中的玩具,被套中的玩具就作为奖品奖给游戏者。现给定一个套圈游戏场的布局,固定每个玩具的位置,请你设计套圈的半径尺寸,使得它每次最多只能套中一个玩具。但同时为了让游戏看起来更具有吸引力,这个套圈的半径又需要尽可能大。把问题进一步简化,假设每个玩具都是平面上的一个没有面积的点,套圈是简单的圆。一个玩具被套住,是指这个点到圆心的距离严格小于圆半径。如果有两个玩具被放在同一个位置,那么输出的圆半径是0。输入要求:输入由若干组是数据组成。每组数据的第1行包含一正整数N(2N100000),代表场地中玩具的个数。接下来有N行输入,每行包含一个玩具的x和y坐标。当N为0时,表示全部测试结束,不要对该数据做任何处理。输出要求:对每一组测试,在一行里输出符合设计要求的套圈的半径,精确到小数点后两位。题目九:动态规划:商店购物题目要求:某商店促销中为顾客提供各种优惠,把若干种商品分成一组降价销售。例如一朵花原价2元,一只花瓶原价5元,而用优惠券可以用5元买3朵花,用10元买2只花瓶加1朵花。这时顾客买3朵花和2只花瓶只须付14元-用第2种优惠组合买2只花瓶加1朵花,再用原价买2朵花,所付费用最少。请编写程序帮助收银员计算顾客所购商品应付的最少费用。假定顾客手中优惠券都有充分多张,可将同一种券反复用任意多次。例如,给定优惠券上写明3朵花售5元,则顾客买6朵花时可将此券用2次,只需付10元。注意:收银员不能改变顾客的购物种类和数量,即使增加某些商品会使付款总数减少,也不允许收银员做任何改变。输入要求:输入由2部分组成。第1部分包含10000种商品的名称和价格,每一行以下列各式给出:商品名称价格 其中商品名称由不超过60个字符切不包括“”和“”的字符串组成,价格是非负实数。接下来的输入由若干组测试数据组成。每组数据包含一张优惠券的N种组合优惠的描述和顾客购物清单。其中优惠券的描述按如下格式给出:N(20)是优惠券中的商品组合方法的个数。下面有N行,每行给出m商品1*n1 商品2* n2商品m* nm总价格 表示该组合包含m种商品,其中商品i必须买ni(9)件,总的优惠价格是非负数实数总价格。任何一张优惠券中涉及的不同商品数(N种组合涉及的所有商品数)不超过6件。例如,样例输入中的21flower*3 5.002flower*1vase*2 10.00表示该优惠券包含2种组合方式,即:可以用5元买3朵花,用10元买2只花瓶加1朵花。顾客购物清单的描述按如下格式给出:L(30)是不同商品的个数。下面有L行,每行给出商品名称购买数量(9)例如输入例子中的2flower 3 vase 2 表示该顾客要买3朵花和2只花瓶。当N为负数时表示全部测试结束,不要对该数据做任何处理。输出要求:对每一组测试,在一行里输出顾客应付的最少费用,精确到分。题目十:熊猫烧香题目要求:“熊猫烧香”是在网络中传播的一种著名病毒,因为图标是一只可爱的熊猫而得名。该病毒比较难以处理的一个原因是它有很多变种。现在某实验室的网络就不幸感染了这种病毒。从图中可以看到,实验室的机器排列为一个M行N列的矩阵,每台机器只和它相邻的机器直接相连。开始时有T台机器被感染,每台遭遇的熊猫变种类型都不同,分别记为Type1, Type2, Typet。每台机器都具有一定级别的防御能力,将防御级别记为L(0L1000)。“熊猫烧香”按照下列规则迅速在网络中传播:病毒只能从一台被感染的机器传到另一台没有被感染的机器。如果一台机器已经被某个变种的病毒感染过,就不能再被其他变种感染。病毒的传播能力每天都在增强。第1天,病毒只能感染它可以到达的、防御级别为1的机器,而防御级别大于1的机器可以阻止它从自己出继续传播。第D天,病毒可以感染它可以到达的、防御级别不超过D的机器,而只有防御级别大于D的机器可以组织它从自己出继续传播。在同一天之内,Type1变种的病毒先开始传播,感染所有它可能感染的机器,然后是Type2变种、Type3变种依次进行传播。以下图为例说明传染的过程。本题的任务是:当整个网络被感染后,计算有多少台机器被某个特定变种所感染。输入要求:输入由若干组测试数据组成。每组数据的第1行包含2个整数M和N(1M,N500),接下来是一个MN的矩阵表示网络的初始感染状态,其中的正、负数的意义如题目描述中所定义。下面一行给出一个正整数Q,是将要查询的变种的个数。接下去的Q行里,每行给出一个变种的类型。当M或N为0时,表示全部测试结束,不要对该数据做任何处理。输出要求:对每一组测试,在一行里输出被某个特定变种所感染的机器数量。题目十一:神秘国度的爱情故事题目要求:某个太空神秘国度中有很多美丽的小村,从太空中可以想见,小村间有路相连,更精确一点说,任意两村之间有且仅有一条路径。小村A中有位年轻人爱上了自己村里的美丽姑娘。每天早晨,姑娘都有去小村B里的面包房工作,傍晚6点回到家。年轻人终于决定要向姑娘表白,他打算在小村C等着姑娘路过的时候把爱慕说出来。问题是,他不能确定小村C是否在小村B到小村A之间的路径上。你可以帮他解决这个问题吗?输入要求:输入由若干组测试数据组成。每组数据的第1行包含-正整数N(1N50000),代表神秘国度中小村的个数,每个小村即从0到N-1编号。接下来有N-1行输入,每行包含一条双向道路的两个端点小村的编号,中间用空格分开。之后一行包含一正整数M(1M500000),代表着该组测试问题的个数。接下来M行,每行给出A、B、C三个小村的编号,中间用空格分开。当N为0时,表示全部测试结束,不要对该数据做任何处理。输出要求:对每一组测试给定的A、B、C,在一行里输出答案,即:如果C在A和B之间的路径上,输出Yes,否则输出No。考核和成绩评定考核办法:在学生完成设计、调试后,组织验收。同时,为了更好的了解学生对课程内容的掌握情况,针对有关设计中所涵盖的知识点,提出相应问题,要求学生回答。成绩评定:根据学生的算法设计思想和程序的调试、运行结果及回答问题的情况,给出合理的成绩。(1)很好的完成了所承担的设计任务,算法设计有新意,程序调试顺利,结果正确,回答提问准确,9095分。(2)较好地完成了所承担的设计任务,算法设计完全,程序调试较顺利,结果正确,回答问题准确,85分以上。(3)能够完成所承担的设计任务,经提示程序调试通过,结果正确,回答问题基本准确,7079分。(4)程序没有严重错误,经老师指导调试成功,结果正确,能够回答基本问题,6069分。(5)不能独立完成设计任务,不及格处理。
展开阅读全文