深度优先实现拓扑排序--java
来源:互联网 发布:php使用html模板 编辑:程序博客网 时间:2024/06/02 04:23
import java.util.*;public class Topology{static final int MAX = 20;//最大点数static int[][] g; //图static LinkedList<Integer> queue; //保存排序结果static int[] ingoing; //记录节点入度static int[] outgoing;//记录节点出度static int[] used;static int ver;static int edge;static void tplgOrd(){//从所有出度为0的点开始遍历for(int i=1;i<=ver;i++){if(outgoing[i] == 0)helper(i);}}static void helper(int index){//入度为0,说明没有先驱节点了if(ingoing[index]==0) {if(used[index]==0){used[index] = 1;queue.addLast(index);}return;}//有边指向当前节点说明还有前驱节点,处理前驱节点for(int i = 1;i <= ver;i++){if(g[i][index] < Integer.MAX_VALUE)//有边相连helper(i);}//到这里一定是所有的前驱节点都处理过了,所以只要把当前节点加入队列即可。if(used[index] == 0){used[index] = 1;queue.addLast(index);}}static void init(){g = new int[ver+5][ver+5];queue = new LinkedList<Integer>();ingoing = new int[ver+5];outgoing = new int[ver+5];used = new int[ver+5];for(int i=1;i<=ver;i++){//初始S为空,Q为全部节点for(int j=0;j<ver;j++)g[i][j] = Integer.MAX_VALUE;}}static void input(){Scanner cin = new Scanner(System.in);System.out.println("请输入 点数 边数");ver = cin.nextInt();edge = cin.nextInt();int s,e,w;init();System.out.println("起点 终点");for(int i=0;i<edge;i++){s = cin.nextInt();e = cin.nextInt();g[s][e] = 1;if(s != e){ingoing[e] += 1;outgoing[s] += 1;}}}static void print(){System.out.println("拓扑排序结果:");Iterator<Integer> iter = queue.iterator();while(iter.hasNext()){System.out.print(iter.next()+" ");}System.out.println();}public static void main(String[] args){input();tplgOrd();print();}}/*请输入 点数 边数9 10起点 终点1 22 42 35 35 66 73 71 48 49 9拓扑排序结果:1 2 8 4 5 3 6 7 9*/
1 0
- 深度优先实现拓扑排序--java
- 深度优先搜索+拓扑排序
- Lintcode:拓扑排序(深度优先搜索,广度优先搜索)
- 深度优先搜索及拓扑排序(链式前向星实现)
- 算法导论 第23章 广度优先搜索 深度优先搜索 拓扑排序 强连通分量 C++实现
- JAVA实现拓扑排序
- 拓扑排序 JAVA实现
- 拓扑排序之关键路径(深度优先搜索)
- 有向图(4)--基于深度优先的拓扑排序
- 深度优先搜索DFS(depth first search),拓扑排序
- 图的深度优先搜索及拓扑排序
- 图的拓扑排序,广度和深度优先搜索
- 深度优先的时间戳与拓扑排序
- 深度优先、广度优先java实现
- java实现深度优先遍历
- java实现深度优先算法
- 拓扑排序+优先队列
- 拓扑排序+优先队列
- java内存分配和String类型的深度解析
- 在Servlet中获取Spring的指定bean
- 利用UIWebView打造一个炫酷的视频背景视图(OC & Swift)
- 安卓异步任务类AsyncTask——突出一个简单、好用
- nodejs微信开发--调用微信JS SDK
- 深度优先实现拓扑排序--java
- Spring Boot应用之数据加密以及字段过滤
- swift和oc单例创建方式
- Android API Level最新版本到6.0Platform Codenames, Versions, API Levels, and NDK Releases
- 为什么农民宁可被拘留也要烧秸秆?对烧秸秆农民拘留、罚款,非解决问题之道
- makefile里PHONY的相关介绍
- 中央文献重要术语译文发布
- Sql Server 数据分页
- 第七周 项目6 停车场模拟