首先,先定义一个结构体Team来表示参赛队伍,包含
参赛队编号TeamID
参赛作品名称workname,
参赛学校school,
赛事类别eventCate,
参赛者participants,
指导老师teachers等基本信息
然后,定义一个二叉排序树的结点结构体TreeNode
接着,打开参赛队伍的文件,用teamsall储存从txt文档中提取到的信息,使用getline函数逐行读取,然后再用while循环,遇到#后停止,然后将数据导入到vector类型的items当中,如果items当中的函数有六个元素,那么元素就一个一个插入到a当中,再将a插入到teamsall和二叉排序树当中。
设置函数addteam()和deletefile(),revise(),其中revise()函数是对文件进行操作,addteam()向文件中插入新的数据,deletefile()是删除指定元素,revise()函数是修改指定的元素,而addteam2()和deleteteam(),还有reworkteam()函数是对vector类型变量进行操作,addteam2()是向vector中加入Team类型的变量,而deleteteam()便是删除指定元素,reworkteam()是修改指定的vector类型的变量。
插入排序的查询输出(根据学校名称查询),可以选择按参赛学校查询,进行遍历全部的数据来寻找符合条件的参赛团队;或者按赛事类别查询,使用teamID容器根据数据的键值查找符合条件的参赛团队,当按赛事类别查询时,可以使用插入排序算法将参赛团队按赛事类别先排序后输出结果。
然后,在函数外面创建13个决赛区,读取赛事组织文件中的参赛队信息,将各个参赛团队按照赛事类别分到各个决赛区,先输出赛区的数字,然后输出赛区的叫号顺序,
校园导航系统方面,可以用Floyd算法计算最短路径,即先初始化距离矩阵和下一个节点矩阵,然后对于每个中间节点k,更新任意两点之间的距离和路径的下一个节点;直到所有中间节点都被枚举完毕,就可以得到最短路径和路径的下一个节点。其中,建筑物结构体和边结构体可以用来表示建筑物和路径信息。成员函数vertex和addPath分别用于添加建筑物和路径。navigate函数接受起始点和目标点,最后使用Floyd算法计算出最短路径后,输出路径和长度。