例题: 算法要考虑的问题: “没有前驱”如何判断 “删除顶点及以它为尾的弧”如何操作 解决方法: 以“入度为零”作为“没有前驱”的量度 算法中附设了“栈”,用于保存当前出现的入度为零的顶点 “删除顶点及以它为尾的弧”的这类操作可用“弧头顶点的入度减1”的办法来替代 6.6.2 拓扑排序的实现 由于拓扑排序中对图的主要操作是“找从顶点出发的弧”,并且AOV网在多数情况下是稀疏图,因此存储结构取邻接表为宜 6.6.2 拓扑排序的实现 算法过程: (1)写出有向图的邻接表存储结构 (2)统计各顶点的入度值 (3)从上到下扫描各顶点入度,若为0则入栈 (4)从栈顶取一顶点加入拓扑序列中 (5) 相应的在邻接表中以该顶点为起点的终点入度值减1,若为0则入栈 (6)重复上述第4、5步 6.6.2 拓扑排序的实现 1 0 3 2 4 5 0 0 2 2 1 3 2 2 3 4 3 5 5 5 0 1 2 3 4 5 0 1 1 1 1 0 4 4 2 0 0 2 0 1 2 3 3 0 5 5 辅助栈 当顶点入度为0即入栈 取栈顶元素加入拓扑序列中 唯一的拓扑有序序列为: 顶点编号 入度值 6.6.2 拓扑排序的实现 【算法6.11】求各顶点入度的算法 public static int[] findInDegree(ALGraph G) throws Exception { int[
原创力文档

文档评论(0)