Java实现有向图的拓扑排序

1.拓扑排序

对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列

2.实现方法

利用二维数组保存有向图,重复边过滤,有边的话map[i][j]=1,i到j存在着边,用一个indegree数组保存每个节点的入度信息,

从度为0的节点开始,入栈,若栈不为空,出栈,当前元素到其他元素若存在边,去除这条边,map[i][j]=0,此外,让边的末尾节点入度减1,若减为0,则重新入栈,并且将此顶点入度去掉

3.代码实现

package 有向图的拓扑排序;

import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;

/**
 * @Author:likui
 * @PacakgeName:test
 * @Description: 拓扑排序
 * 3 1 5 21 10  孩子节点
 * 0 3 3 1 5   父节点
 * 3           指定节点
 * @Date:Created in 9:04 2019/9/7
 */

public class Main {

    public static void way(int []x,int y[],int pos,int max){
        int indegree[]=new int[max];//保存每个顶点的入度信息
        int map[][]=new int[max][max];//保存整个有边的图
        for (int i = 0; i  BFS(int []indegree,int[][] map,int pos) {
        ArrayList list=new ArrayList<>();//保存拓扑排序
        Stack stack = new Stack<>();
        //indegree[pos-1]=-1; //从指定位置开始进行拓扑排序
        for (int i = 0; i 

4.输出测试用例结果,0代表不存在的节点

Java实现有向图的拓扑排序_第1张图片

 

你可能感兴趣的:(java,数据结构)