利用链式前向星的巧妙构造,将以该起点为弧尾的第一条边的编号赋给新边
的 next,方便通过起点来遍历连接它的每一条边。这种操作相当于在邻接表
中的以该起点为头结点的链表中,插入一条新边,位于头结点和原第二个结
点之间。这为任务一和任务二中的遍历提供了十分方便快捷的方式。
(2)任务 1 采用 Dijkstra 算法求给定起点的单源最短路。用一个 ans 数
组来记录从起点到某一点的最短路,数组的下标即是该点的编号。同时在遍
历时,需要用一个辅助数组来标记所有被确定为最终最短路的点(即从起点
到该点的路径最小值已被求出,不会再被更新),同时用一个数组存上更新
了最短路的结点。这两个数组用于在每次遍历时,找到与起点路径最短,同
时还没有被确定为最终最短路的点。以该点为前驱,就可以进行下一次更新
所有以它为前驱的后继点的最短路。因为输入的数据不保证从起点出发可以
到达任意点,还需要在做出选择后将已到达点数增一,如果最后到达点数与
有向图的总点数不一致,就输出-1,;否则遍历 ans 数组,找到最大值就是所
要求的最短时间。
(3)任务 2 采用广度优先搜索的思想来遍历神经网络。因为该网络是
有向无环图,在广度优先搜索时不会出现层与层之间交集的情况。因为一开
始只有输入层有数据,可以从输入层做第一次扩展,得到隐藏层中与输入层
相关联的结点,作为第二层结点。这里采用数组和一个 left 和一个 right 下标
来构成一个队列,将每次扩展得到的结点编号入队,在遍历时出队,然后继
续将它关联的结点入队。还要注意隐藏层结点的入度不一定为 1,所以入队
时要用一个 vis 辅助数组标记已入队的结点编号,这样在搜索时就不会重复
入队,重复计算了。如果搜索到输出层结点,同样不再入队,因为它出度为
0。根据扩展的逻辑,就可以将整个神经网络的数据更新一遍,得到答案。
2.2 存储结构及操作
2.2.1 存储结构
评论0
最新资源