java实现拓扑排序,检测有向图中是否存在环。


import java.util.*;


public class TopologicalSort {

    private int V;   // 顶点数

    private LinkedList adj[]; // 邻接表


    TopologicalSort(int v) {

        V = v;

        adj = new LinkedList[v];

        for (int i=0; i

            adj[i] = new LinkedList();

    }


    // 添加边

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


    // 拓扑排序

    boolean topologicalSort() {

        int[] inDegree = new int[V];

        

        // 计算所有顶点的入度

        for (int i = 0; i < V; i++) {

            for (int node : adj[i]) {

                inDegree[node]++;

            }

        }


        Queue queue = new LinkedList<>();

        for (int i = 0; i < V; i++) {

            if (inDegree[i] == 0)

                queue.add(i);

        }


        int cnt = 0;

        List topOrder = new ArrayList<>();


        while (!queue.isEmpty()) {

            int u = queue.poll();

            topOrder.add(u);


            for (int node : adj[u]) {

                if (--inDegree[node] == 0)

                    queue.add(node);

            }

            cnt++;

        }


        // 如果计数不等于顶点数,说明有环

        if (cnt != V) {

            System.out.println("图中存在环");

            return false;

        } else {

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

            for (int i : topOrder) {

                System.out.print(i + " ");

            }

            return true;

        }

    }


    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);


        g.topologicalSort();

    }

}

这段代码实现了基于Kahn算法的拓扑排序,通过计算入度和队列处理来检测图中是否存在环。如果排序顶点数不等于总顶点数,则说明存在环。

http://zhishi.liyintong.com

http://zhishi.naqimai.cn

http://zhishi.kucedu.cn

http://zhishi.yueluyan.cn

http://zhishi.huayuke.cn

http://zhishi.haizichu.cn

http://zhishi.yawanmei.cn

http://zhishi.biaolele.cn

http://zhishi.shenhebu.cn

http://zhishi.zimeiren.cn

http://zhishi.qishouka.cn

http://zhishi.ruanding.cn

http://zhishi.xjhsdsc.cn

http://zhishi.itoren.cn

http://zhishi.iseebest.cn

http://zhishi.bndaye.cn

http://zhishi.rustler.cn

http://zhishi.excelta.cn

http://zhishi.diaolift.cn

http://zhishi.jxpfbyjs.cn

http://zhishi.banans.cn

http://zhishi.aspira.cn

http://zhishi.bxhqw.cn

http://zhishi.pudiweng.cn

http://zhishi.tingbu.cn

http://zhishi.ouhei.cn

http://zhishi.huiha.cn

http://zhishi.miuling.cn

http://zhishi.podang.cn

http://zhishi.fenkun.cn

http://zhishi.liangran.cn

http://zhishi.zouliu.cn

http://zhishi.xuhou.cn

http://zhishi.kuopao.cn

http://zhishi.lunkai.cn

http://zhishi.zhaiti.cn

http://zhishi.fogei.cn

http://zhishi.gengluo.cn

http://zhishi.wadiao.cn

http://zhishi.hunjun.cn

http://zhishi.huanken.cn

http://zhishi.chuancong.cn

http://zhishi.buzun.cn

http://zhishi.zhuozou.cn

http://zhishi.lazai.cn

http://zhishi.zengle.cn

http://zhishi.suidun.cn

http://zhishi.zhaojunji.cn

http://zhishi.huihuoban.cn

http://zhishi.wanjiahua.cn

http://zhishi.conglinyi.cn

http://zhishi.henyoupin.cn

http://zhishi.wuwenkang.cn

http://zhishi.tujiachen.cn

http://zhishi.zilaoweng.cn

http://zhishi.baolema.cn

http://zhishi.shumeilin.cn

http://zhishi.anhetong.cn

http://zhishi.wenjishu.cn

http://zhishi.kansande.cn

http://zhishi.yueshijie.cn

http://zhishi.tihujiu.cn

http://zhishi.huatoutou.cn

http://zhishi.xiaolaige.cn

http://zhishi.huguangu.cn

http://zhishi.lvdate.cn

http://zhishi.kesini.cn

http://zhishi.soubianlu.cn

http://zhishi.fuenbu.cn

http://zhishi.liuyakun.cn

http://zhishi.zouyizou.cn

http://zhishi.juyingba.cn

http://zhishi.namahu.cn

http://zhishi.dadudu.cn

http://zhishi.xuewenzi.cn

http://zhishi.lazhuyong.cn

http://zhishi.aizishu.cn

http://zhishi.nianjiepo.cn

http://zhishi.baisuijie.cn

http://zhishi.wanyuecun.cn

http://zhishi.shoupashu.cn

http://zhishi.hetongmei.cn

http://zhishi.ouenming.cn

http://zhishi.qianyiduo.cn

http://zhishi.yidingzhi.cn

http://zhishi.zouyuming.cn

http://zhishi.mofaya.cn

http://zhishi.hexiangru.cn

http://zhishi.quyouban.cn

http://zhishi.mingyinsi.cn

http://zhishi.junepan.cn

http://zhishi.qiyuehong.cn

http://zhishi.ledatong.cn

http://zhishi.chenqinga.cn

http://zhishi.ebuyun.cn

http://zhishi.gayijiu.cn

http://zhishi.liqinge.cn

http://zhishi.liubawan.cn

http://zhishi.huabaohan.cn

http://zhishi.aiguandan.cn

http://zhishi.judoubang.cn

http://zhishi.huachenyu.cn

http://zhishi.hexiaolia.cn

http://zhishi.feiyuxuan.cn

http://zhishi.zhenwasai.cn

http://zhishi.maoweilai.cn

http://zhishi.yunyuewei.cn

http://zhishi.kemensen.cn

http://zhishi.anxinyuan.cn

http://zhishi.deyisheji.cn

http://zhishi.ximaguohe.cn

http://zhishi.gewukeji.cn

http://zhishi.rehuang.cn

请使用浏览器的分享功能分享到微信等