【数据结构与算法 | 图篇】拓扑排序

1. 概念

拓扑排序是是一种针对有向无环图进行的排序方法。它将图中所有顶点排成一个线性序列,使得对于图中的每一条有向边(u, v),顶点u在序列中都出现在顶点v之前。

适用范围:

  • 拓扑排序只适用于有向无环图。

结果非唯一:

  • 对于同一个图,可能存在多个合法的拓扑排序序列。

不存在拓扑排序的情况:

  • 如果图中含有环,则无法进行拓扑排序,因为环内的节点无法确定先后。

2. 思路1(基于队列):

初始化:

找到所有入度为0的节点,并将它们加入到队列。

迭代过程:

从队列中取出一个节点并输出;对于该节点指向的所有邻接节点,减少它们的入度值。如果某个邻接节点的入度变为0,则将其入队。

结束条件:

队列为空时停止。如果输出的节点数量等于图中总节点数,则拓扑排序成功;否则说明图中有环。

3. Java代码实现

@Test
    public void test() {
        Vertex v1 = new Vertex("网页基础");
        Vertex v2 = new Vertex("JAVA基础");
        Vertex v3 = new Vertex("数据库");
        Vertex v4 = new Vertex("JAVA WEB");
        Vertex v5 = new Vertex("Spring框架");
        Vertex v6 = new Vertex("微服务框架");
        Vertex v7 = new Vertex("实战项目");
        // JDK版本太低,用不了of方法
        v1.edges = new ArrayList<>();
        v1.edges.add(new Edge(v4));

        v2.edg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值