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

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

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]+" "); } } } }

1 、用book数组标记图中出现的顶点 ,可以方便记录哪些定点出现过, 尤其是 计算入度为0 的顶点时候可以标记哪些顶点 是存在的并且 入读为零的

2 、开大的adj可以 处理顶点不连续的情况(如 1(1,3)(5,8))其中没有连接的顶点 的adj为空

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

你可能感兴趣的文章
S3C2440上LCD驱动 (FrameBuffer)实例开发讲解
查看>>
Linux音频编程指南
查看>>
usb-otg-调试心得
查看>>
USB规范浏览--设备和主机规范
查看>>
男人的品位--我们自己的最求
查看>>
Android (Linux) Suspend流程
查看>>
LINUX时间管理
查看>>
定时器的使用
查看>>
为Android加入busybox工具
查看>>
使用技巧busybox
查看>>
如何查看与/dev/input目录下的event对应的设备
查看>>
bootloader-bootable解析
查看>>
bootloader (LK)&&android lk bootloader中相关修改指南
查看>>
SD卡驱动分析--基于高通平台
查看>>
SD Card 驱动流程分析
查看>>
Linux之debugfs介绍
查看>>
关于sd卡中一些概念的理解
查看>>
sd卡驱动分析之相关硬件操作和总结
查看>>
好的播文
查看>>
linux dd命令解析
查看>>