博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
有向拓扑排序的应用
阅读量:4354 次
发布时间:2019-06-07

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

有向拓扑排序的应用

  首先输入n个点,表示有向图中有n个顶点,接下来n行, 每行输入几个数字,第i行的数字表示它们是顶点i的后继节点,输出要求保证该行的编号要在这几个数前面,当数字为0时,表示i点没有后继节点了。 就是要求输出这个有向图的拓扑序列。

[输入输出][样例]:
Sample Input
5
0
4 5 1 0
1 0
5 3 0
3 0

Sample Output

2 4 5 3 1

package Main;import java.util.PriorityQueue;import java.util.Queue;import java.util.Scanner;public class Main {    private int n;    private int [][]G;//邻接矩阵    private int [] indegree;//顶点的入度    private Queue
que; private int [] result;//保存结果 public Main(int n,int [] indegree,int [][]G) { this.n=n; this.indegree = indegree; this.G = G; } public static void main(String[] args) { //输出无前驱的定点优先的拓扑排序,该方法的每一步总是输出当前无前驱的顶点 Scanner input = new Scanner(System.in); int n,x; int[][]G; int [] indegree; while(input.hasNext()) { n = input.nextInt(); indegree = new int[n+1]; G = new int[n+1][n+1]; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { x = input.nextInt(); if(x == 0) { break; } G[i][x] = 1; indegree[x]++; } } Main ma = new Main(n,indegree,G); ma.topoSort(); } } private void topoSort() { int r=1; que = new PriorityQueue< Integer>(); result=new int[n+1]; for (int i = 1; i <=n; i++) { if (indegree[i] == 0)//入度为0的顶点入队 que.add(i); } // for(int i=1;i<=n;i++) // System.out.print(indegree[i]); while (!que.isEmpty()) { int v = que.poll();//出队 result[r++]=v;//将v保存到结果集中 for (int i = 1; i <=n; i++) {
//删除顶点v及以v为尾的弧。 if (G[v][i] == 1) { indegree[i]--;//模拟删除边 if (indegree[i] == 0) que.add(i); } } } for(int i=1;i<=n;i++) System.out.print(result[i]+" "); }}

 

转载于:https://www.cnblogs.com/aicpcode/p/4175872.html

你可能感兴趣的文章
<CoreJava> 5.2 Object:所有类的超类
查看>>
输入年月日计算是星期几
查看>>
redis部分配置与报错解决
查看>>
Python Challenge(0-8)
查看>>
oracle中的trunc()函数
查看>>
对大一一年的总结和对大二的规划
查看>>
结构化程序设计04 - 零基础入门学习Delphi13
查看>>
密码学基础
查看>>
Java基础Map接口+Collections工具类
查看>>
OSGI基础知识整理
查看>>
Revit 开发将自己的窗口设置为Revit窗口
查看>>
倾斜摄影数据OSGB转换成3DML(转载)
查看>>
给年轻程序员的几句话
查看>>
ionic如何uglify和minify你的js,css,image,png....
查看>>
[LeetCode]Minimum Depth of Binary Tree
查看>>
jboss初体验
查看>>
Python列表、元组练习
查看>>
angular页面刷新
查看>>
Leetcode:7- Reverse Integer
查看>>
C6表单(方成eform)---自定义流程标题格式
查看>>