Files
PAT/source/analysis/a1004.md
T

1.1 KiB

2017-05-14 16:54:11 +0800 tree

虽然是30分的题,但是好像比1003还简单。

同样使用了邻接链表(adjacent list),数据结构如下:

  • Member(Vertex):表示一个家庭成员,我使用了两个结构成员:
  • level,表示这个人在家谱中的辈分,最高的辈分是0,辈分越低,level越大
  • child,指向Child结构变量,即链表的第一个节点
  • Child(Edge):表示亲子关系,也使用了两个结构成员:
  • ID,表示这个孩子的ID
  • iter,指向相同父母的下一个孩子Child变量

读取数据,建立邻接链表。初始化01节点的level为0,其他level为INF。

然后按level从0开始,依次遍历所有Member,找出相应辈分的家庭成员。这时分两种情况:这个成员没有孩子,那么需要进行计数;这个成员有孩子,那么需要更新他们的level值为这个成员的level+1,以便下一次遍历时找到他们。

使用一个标记表明何时不需再遍历,我用的是记录人数,当之前所有level的人数已经是总人数,那么说明已全部遍历,此时退出循环。