课程设计报告
一、 需求分析
题目 2 需要模拟病毒的变异过程,疫苗研制过程和病毒及其变异病毒在人群中的动态
传播。
将病毒的变异被抽象为一棵树,每个病毒的变异方向总数可能不同,那么这棵树的每
个节点的子节点数可以是任意的,因此考虑采用一定大小的指针数组表示每个节点的子
节点。每个病毒节点的基础信息有:潜伏期,传染能力,致死率,子病毒节点,对应于
通向子节点的边的信息——病毒变异时间,疫苗研制时间,疫苗研制成功后的变异时间。
要求 1 为寻找病毒的最近公共祖先,这需要能找到病毒的变异路径。
要求 2 为对输入树的边信息的要求,即创建的病毒树中,若病毒有子节点,则通向子
节点变异路径上变异时间应小于疫苗研制时间。
要求 3 的假设下,所有变异和疫苗并行研究,比较疫苗研究时间和病毒诞生时间的长
短,若疫苗研制时间落后则需要计算落后时间,病毒诞生时间需要通过找到病毒变异路
径并将路径变异时间相加,疫苗研制时间为父节点病毒到该病毒路径的疫苗研制时间。
要求 4 的沙箱模拟,需要做到在每个小时内更新每个病毒的传染人数,每个病毒感染
病人的状态转移,以及病人所携带病毒的变异和病人康复后对该病毒和该病毒祖先病毒
的免疫。以天为粒度进行输出,最后以沙箱连续两天状态不变作为沙箱模拟结束的条件。
二、 概要设计
输入病毒树信息
(病毒结点和变异路径
信息)
定义结构 virus,包含 incub 病毒潜伏期(天),sprea 病毒潜伏期传染
能力(人/小时),数组 death[3],death[0]~death[2]分别表示康复率、
持续率、死亡率,id 表示病毒编号,cnum 表示病毒可变异的子病毒
数,这些信息通过 input_treenode.txt 输入。在输入过程中,病毒信息
按 id 储存在病毒图谱*map[MAM+1]中。此外,virus 中还有指向父亲
结点的指针 parent,指向子病毒的指针 child[MAXM+1],与变异体对应
的边结点指 edge*related[MAXM+1],记录病毒沙箱状态的 group[3]数
组,以及一个赋值函数。
定义结构 edge,包含 change 病毒变异时间(小时),creatv 该
路径疫苗研制时间(小时),chag_v 疫苗研制成功后病毒的变
异时间。这些信息通过 input_treeedge.txt 输入。
操作一:输入病毒编号
寻找最近公共祖先
输入病毒 A,B 的 id,利用 findpath 函数寻找 A,B 到原始病
毒的路径(各祖先病毒 id)并分别储存在 vector<int>类型的
pathA、pathB 中。从后向前比较 pathA,B 存储的病毒 id,最
后一个相等的 id 即为病毒 A,B 的最近公共祖先节点。
(findpath 函数利用 parent 指针从孩子节点到原始病毒依次
储存 id 到 vector<int>类型变量中)
评论0