java拓扑排序代码

拓扑排序是一种对有向无环图(DAG)进行排序的算法,其结果是一个线性序列,满足以下条件:对于图中的每一条有向边(u, v),顶点u在序列中都出现在顶点v之前。拓扑排序常用于任务调度、课程安排等场景。

以下是一个简单的Java实现拓扑排序的代码示例:

import java.util.*;

public class TopologicalSort {
    private int V; // 顶点数
    private LinkedList<Integer>[] adj; // 邻接表

    // 构造函数
    public TopologicalSort(int v) {
        V = v;
        adj = new LinkedList[v];
        for (int i = 0; i < v; ++i) {
            adj[i] = new LinkedList();
        }
    }

    // 添加边
    void addEdge(int v, int w) {
        adj[v].add(w);
    }

    // 拓扑排序函数
    void topologicalSortUtil(int v, boolean visited[], Stack<Integer> stack) {
        visited[v] = true;
        Integer i;

        for (Integer neighbor : adj[v]) {
            if (!visited[neighbor]) {
                topologicalSortUtil(neighbor, visited, stack);
            }
        }

        stack.push(new Integer(v));
    }

    // 打印拓扑排序结果
    void topologicalSort() {
        Stack<Integer> stack = new Stack<>();

        boolean visited[] = new boolean[V];
        for (int i = 0; i < V; i++) {
            visited[i] = false;
        }

        for (int i = 0; i < V; i++) {
            if (visited[i] == false) {
                topologicalSortUtil(i, visited, stack);
            }
        }

        while (stack.empty() == false) {
            System.out.print(stack.pop() + " ");
        }
    }

    public static void main(String args[]) {
        TopologicalSort g = new TopologicalSort(6);
        g.addEdge(5, 2);
        g.addEdge(5, 0);
        g.addEdge(4, 0);
        g.addEdge(4, 1);
        g.addEdge(2, 3);
        g.addEdge(3, 1);

        System.out.println("拓扑排序结果:");
        g.topologicalSort();
    }
}

在这个示例中,我们首先创建了一个TopologicalSort类,包含一个顶点数V和一个邻接表adj。然后实现了添加边的方法addEdge,以及拓扑排序的核心方法topologicalSortUtiltopologicalSort。最后在main方法中创建了一个实例并调用topologicalSort方法进行拓扑排序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【聚创网】源码分享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值