有向图与拓扑排序

有向图的拓扑排序:

拓扑排序是可以用图模拟的另一种操作。它可以用于表示一种情况,即某些项目或事件必须按照特定的顺序排列或发生。
如:课程的优先关系
这里写图片描述

有向图:
图可以表示这类关系,然而,图需要有一种前面没有涉及的属性:边有方向。这时,图叫做有向图。在有向图中,只能沿着边指定的方向移动。
在程序中,有向图和无向图的区别是有向图的边在邻接矩阵中只有一项。

这里写图片描述

这里写图片描述

对于有向图,增加边的方法只需要一条语句:
public void addEdge(int start, int end)
{
adjMat[start][end];
}

拓扑排序:
假设存在一个课程列表,包含了要得到学位必修的所有课程。下面安课程的先后顺序排列她们。得到学位是列表的最后一项,这就得到了下面的序列:
BAEDGCFH
这种方式的排序就是对图进行拓扑排序。那些在某些课程前面学习的课程在列表中相应的排在前面。

拓扑排序算法的思想虽然不寻常但是很简单。有两个步骤是必须的:
步骤1:找到一个没有后继的顶点。
步骤2:从图中删除这个顶点,在列表的前面插入顶点的标记。

重复步骤1和步骤2,直到所有的顶点都从图中删除。这时,列表显示的顶点顺序就是拓扑排序的结果。

删除顶点似乎是一个极端步骤,但是它是算法的核心,如果第一个顶点不处理,算法就不能要处理的第二个顶点。

算法能够执行是因为,如果有一个顶点没有后继,所以它能成为下一个拓扑排序的最后一个,以此类推。

拓扑排序的算法既可以用于连通图,也可以用于非连通图。这可以模拟另外一种有两个互不相关的目标的情况。


java代码:
下面是topo()方法的代码,这个方法执行了拓扑排序。

public void topo()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值