博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于DFS的拓扑排序
阅读量:4215 次
发布时间:2019-05-26

本文共 1486 字,大约阅读时间需要 4 分钟。

package Graph;import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class TopSortInQueue {	LinkedList
[]adj; boolean []book;//标记是否是顶点 (可以处理顶点不连续的情况) final int MAX = 100;//预设的最大顶点的序号(并非顶点数目) int v, e; public static void main(String[] args) { new TopSortInQueue().run(); } public void run() { Scanner in = new Scanner(System.in); v = in.nextInt(); e = in.nextInt(); book = new boolean[MAX]; adj = new LinkedList[MAX];//这里不能是顶点个数大小因为顶点可能不连续 for(int i = 0; i < adj.length; i++ ) {//这里需要时adj.length因为 顶点 可能不连续 adj[i] = new LinkedList<>(); } for(int i = 0; i < e; i++ ) { int a = in.nextInt(); int b = in.nextInt(); adj[a].offer(b); book[a] = true; book[b] = true; }// for(int i = 0; i < adj.length; i++ ) {// System.out.println(adj[i]);// } topSort(); } public void topSort() { int []ins = new int[MAX];//记录各节点入度 int []rel = new int[v];//记录排序结果 Queue
que = new LinkedList<>(); for(int i = 0; i < adj.length; i++ ) { for(int w:adj[i]) { ins[w]++; } } for(int i = 0; i < v; i++ ) { if(ins[i] == 0 && book[i]) {//是顶点 并且 入度为 0 入队 que.offer(i); } } int cnt = 0; while(!que.isEmpty()) { int v = que.poll(); rel[cnt++] = v; for(int w:adj[v]) { ins[w]--; if(ins[w] == 0 && book[w]) {//是顶点 并且 入度为 0 入队 que.offer(w); } } } if(cnt != v) { System.out.print("hasCycle"); return; } else { for(int i = 0; i < cnt; i++ ) { System.out.print(rel[i]+" "); } } } }

转载地址:http://jlimi.baihongyu.com/

你可能感兴趣的文章
【屌丝程序的口才逆袭演讲稿50篇】第三篇:我的舍与得的2014[张振华.Jack]
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第五篇:不要给自己找任何借口【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第七篇:请留意我们身边的风景 【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第八篇:坚持的力量 【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第九篇:春节那些事-过年回家不需要理由【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第十一篇:马云乌镇40分钟演讲实录【张振华.Jack】
查看>>
Java并发编程从入门到精通 张振华.Jack --我的书
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第十二篇:世界上最快的捷径【张振华.Jack】
查看>>
Android中Java代码和XML布局效率问题
查看>>
android TextView属性大全(转)
查看>>
Conclusion for Resource Management
查看>>
Conclusion for Constructors,Destructors,and Assignment Operators
查看>>
Conclusion for Accustoming Yourself to C++
查看>>
面试题1:赋值运算函数(offer)
查看>>
Mark : MessagePack简介及使用
查看>>
Mark : hive文件存储格式
查看>>
mark : hadoop 四种压缩格式
查看>>
All Things OpenTSDB
查看>>
单例模式(singleton),工厂方法模式(factory),门面模式(facade)
查看>>
抽象模式,适配器模式(Adapter),模板方法模式(Template method)
查看>>